2016-10-19 3 views
-2

ユーザの入力ミスの原因となるMagic 8ボールプログラムを作成する必要があり、そのためにループを使用する必要があります。私は、コードを実行し、それは空の文字列にするときJavaは複数の条件が適切に実行されていないwhileループです

boolean okay; 
    do { 
     System.out.printf("What is your question?\n"); 
     questionStr = keyboard.nextLine(); 
     int length = questionStr.length(); 
     if (questionStr.length() == 0) { 
      System.out.println("Not allowed."); 
      okay = false; 
     } else if (!(questionStr.charAt(length - 1) == '?')) { 
      System.out.println("Add question mark."); 
      okay = false; 
     } else if (questionStr.length() > 60) { 
      okay = false; 
     } 
     okay = true; 
    } while (!okay); 

、それはプリントアウト許可されていませんが、それはまだ残りのコードを実行し、ループバックをしないと聞いて「あなたの質問は何ですか?」疑問符でも同じことが起こります。それは "疑問符の追加"を表示しますが、想定されているようにループバックしません。私が60文字以上の質問をすると、コードは実行されてループバックせず、「あなたの質問は何ですか?」という質問をユーザに継続します。コードが60文字未満になるまで私はここで間違っていることを理解しようとしています。

+1

'okay = true;の前に' else'を追加します。 – saka1029

+1

初歩的なデバッグでは、最初の1分間に 'okay'を' true'に設定することで問題を発見しました。これは実際にはオンラインデバッガではありません –

+0

ようこそスタックオーバーフロー!デバッガの使い方を学ぶ必要があるようです。 [補完的なデバッグ手法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)にご協力ください。その後も問題が残っている場合は、もう少し詳しくお聞かせください。 –

答えて

1

掲載

okay = true; 
if (questionStr.length() == 0) { 
    System.out.println("Not allowed."); 
    okay = false; 
} else if (!(questionStr.charAt(length - 1) == '?')) { 
    System.out.println("Add question mark."); 
    okay = false; 
} else if (questionStr.length() > 60) { 
    okay = false; 
} 

として、それを否定するあなたのif文は、あなたが無条件にあなたの状態while (!okay);trueokayを設定するので、ループは必ず終了okay = true;前に移動します。

関連する問題