2011-10-23 13 views
0

私はクラスの宿題に取り組んでいます。 2点間の距離を計算する必要がある場所。コードは基本的に行われますが、私には1つの質問があります。 qを入力してループを終了します。私はメッセージを返す。入力文字列の場合: "Q"スレッド「main」の例外は何を意味しますか?

at.sun.misc.FloatingDecimal.readJavaFormatString(未知のソース)

java.lang.Doubleのにスレッド "メイン" java.lang.NumberFormatExceptionで

例外.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"を次の行のダブルとして解析して例外をスローします。

1

つまり、 'q'は数字ではありません。文字列を比較するにはequalsを使用する必要があります。==は参照を比較するだけです。

0

この古い栗...

あなた==を使用して(安全に)文字列を比較することはできません。代わりに.equals()を使用してください:

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



ジャワ= Javascriptを

0

x1String == "q"は、単に参照を比較します。文字列"q"で入力文字列を比較するために、あなたはcompareToまたはequals使用する必要があります、あなたは(x1Stringのオブジェクトの内容を比較する機能などequalsを使用する必要があります

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

他の人が言ったようにし、 "q")を使用するのではなく、文字列が数値かどうか、またはの例外がスローされたかどうかを確認する必要があります(parseDouble)。

誰かが"asdfg"を入力したらどうなりますか?

関連する問題