2011-09-16 10 views
0

ループのためのセンチネルとして文字列入力(yesまたはno)を使用しようとしています。ループはswitchステートメントを繰り返し、最後にユーザーにyesまたはnoの質問を促します。答えとして「はい」と入力するまで、ループは引き続きユーザーからデータを受け取ります。この問題は、センチネルに新しい価値を与えようとすることによってもたらされます。Javaの文字列変数の入力を変更する

***コメントを確認して変更を加えました。更新されたコードは次のとおりです。

Scanner input = new Scanner (System.in); 

    System.out.print("Please enter a product number, 1 - 5: "); 
    int product = input.nextInt(); 
    double sum = 0; 
    boolean complete = false; 

    while (!complete) { 

    switch (product){ 
     case 1: sum = sum + 2.98; 
     break; 
     case 2: sum = sum + 4.50; 
     break; 
     case 3: sum = sum + 9.98; 
     break; 
     case 4: sum = sum + 4.49; 
     break; 
     case 5: sum = sum + 6.87; 
     break; 
    } 
    System.out.print("Is your order complete? Please type true or false:"); 
    complete = in.nextLine(); 
    } 

すべてが動作していますが、私はまだセンチネルを破るプロンプトに問題があります。私はループを終了するためにユーザーがtrueを入力する場所に設定しようとしています。私は何か見落としたと思っています。私は大いに助けに感謝します、ありがとう。

+0

これはコンパイルされますか? completeがStringであるかのように見えますが、while(!)を持つことはできません。それは許されないだけです。 –

答えて

2

変更

default: String complete = input.Stream(); //Not coded, but will also ask for input. 

default: complete = input.Stream(); //Not coded, but will also ask for input. 

にあなたが望むものではない文字列を、再宣言しています。また、==ではなく、.equalsを使用して文字列やその他の参照型を指定することを推奨します。

0

あなたはそれを2度宣言しているので、つぶれています。 2番目のString宣言を外してください:

default: complete = input.Stream(); //Not coded, but will also ask for input. 
0

完全に2回宣言しています。

デフォルト:完全= input.Stream()

0

2つのこと:

1)あなたは、完全な再宣言されているとして、あなたのデフォルトのcase文を修正してみてください。デフォルトの場合は、単に次のようになります。

default: complete = input.Stream(); 

2)Javaであなたと文字列を比較することはできません=!。すべての文字列はオブジェクトであり、比較演算子を使用することにより、オブジェクトの内容ではなく、オブジェクトの識別子を比較しています。同じメモリ位置を指す2つの文字列でない限り、Javaは2つのStringオブジェクトを等しいと見なしません。さらに良い習慣として

while (!complete.equals("yes")) { 

または::二つの文字列の値を比較するには次のような()メソッドを.equalsを使用する必要が

while (!"yes".equals(complete)) { 

これが優れている、完全な文字列変数であれば理由リテラル文字列 "yes"は常にnullでないオブジェクトに評価されるため、最初の比較ではnullポインタ例外がスローされます。

希望に役立ちます。

デビット

関連する問題