2011-10-23 41 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"會怎麼樣?