2011-10-23 39 views
0

我正在为班级做作业问题。你必须计算两点之间的距离。代码基本完成,但我有一个问题。当我输入q结束循环。我收到一条消息。线程“主”中的异常,这是什么意思?

在线程异常 “主” java.lang.NumberFormatException:对于输入字符串: “Q”

at.sun.misc.FloatingDecimal.readJavaFormatString(未知源)

在java.lang.Double中.parseDouble(未知源)

atDistance.main(Distance.java:11)​​

import java.util.Scanner; 
public class Distance { 
public static void main(String[] args){ 
    Scanner input = new Scanner(System.in); 
    while (true){ 
     System.out.print("Enter coordinate for x1: "); 
     String x1String = input.next(); 
     if (x1String == "q") 
      break; 
      double x1 = Double.parseDouble(x1String); 

     System.out.print("Enter coordinate for y1: "); 
     String y1String = input.next(); 
     if (y1String == "q") 
      break; 
      double y1 = Double.parseDouble(y1String); 

     System.out.print("Enter coordinate for x2: "); 
     String x2String = input.next(); 
     if (x2String == "q") 
      break; 
      double x2 = Double.parseDouble(x2String); 

     System.out.print("Enter coordinate for y2: "); 
     String y2String = input.next(); 
     if (y2String == "q") 
      break; 
      double y2 = Double.parseDouble(y2String); 

     double distance = (Math.pow(x2 - x1,2)) + (Math.pow(y2 - y1,2)); 
     distance = Math.sqrt(distance); 
     System.out.printf("The distance is %5.2f",distance); 
     System.out.println(""); 
    } 
}//main 
}//Distance 

这是我写的代码。任何帮助表示赞赏。

回答

1

您不做字符串==比较! “==”比较检查它们是否是完全相同的对象,而不是如果字符串包含相同的字符。改为尝试x1String.equals("q")

现在发生的事情是,“==”会说“这些不是同一个对象”,然后它会尝试在下一行中解析“q”作为double,这会抛出异常。

1

这意味着'q'不是一个数字。要比较字符串,您必须使用equals==只是比较引用。

0

这老栗子...

不能比较使用==字符串(安全)。使用.equals()代替:

if (x1String.equals("q")) // change every == to .equals() 



的Java =的Javascript

0

x1String == "q"只是比较参考。为了将输入字符串用字符串"q"比较,你需要使用compareToequals

if (x1String.compareTo("q") == 0) 
// or 
if (x1String.equals("q")) 
0

正如有人说,你应该使用的功能,例如equals比较对象的内容(x1String"q")而不是比较实际的对象/引用,但是您还应该检查字符串是否为数字和/或parseDouble引发的任何异常。

如果有人输入"asdfg"会怎么样?