boolean r = false ; int s = 0 ;
while (r == false) ;
{
s = getInt() ;
if (!(s>=0 && s<=2)) System.out.println ("try again not a valid response") ;
else r = true ;
}
3 または 123 が入力され、ループが終了しない場合でも、テキスト自体は表示されません。ここで何が問題なのですか?
boolean r = false ; int s = 0 ;
while (r == false) ;
{
s = getInt() ;
if (!(s>=0 && s<=2)) System.out.println ("try again not a valid response") ;
else r = true ;
}
3 または 123 が入力され、ループが終了しない場合でも、テキスト自体は表示されません。ここで何が問題なのですか?
条件の後にセミコロンがあります。中括弧を使用してブロックを指定するwhile
場合、セミコロンは使用しません。
「;」を削除します しばらくして。
他の人がバグを指摘していますが、あなたのコードは別の意味で恐ろしく、最終的につまずきます:
if (!(s>=0 && s<=2)) System.out.println ("try again not a valid response") ;
else r = true ;
if
orelse
句の場合、複数のステートメントを簡単に実行できるため、これは悪いことです。中括弧を使用し、条件ステートメントを 1 行に配置しないようにします。
if (!(s>=0 && s<=2))
{
System.out.println ("try again not a valid response");
}
else
{
r = true;
}
読みやすく、見にくいバグが発生する可能性がはるかに低くなります。
他のコメントに加えて、if も変更する必要があります。
if (s < 0 || s > 2)
この方がずっと分かりやすいです。
while(r == false)
する必要があります
ながら(!r)
他の誰もがセミコロンについて言ったことにもかかわらず、それは私がそれで間違っていると思うものです:)
ダニエル・ディパオロに+1。これが当てはまる理由を明確にするために、別の回答を投稿すると思いました。
Java の while ループは、2 つの方法のいずれかで記述できます。ループの本体に 1 行しかない場合は、簡略化して記述できます。
while (true)
System.out.println("While loop");
これにより、プログラムが終了するまでコンソールに「While loop」と表示されます。もう 1 つのオプションは、上記で行ったように、中括弧の間にループ本体を指定することです。
int i = 0;
while (i < 10) {
System.out.println("i = " + i);
i++;
}
これにより、「i = 0」、「i = 1」、...、「i = 9」がそれぞれ別の行に出力されます。
あなたが投稿したコードは、2つを混同しています。省略形の while ループでは、Java パーサーは while ループ条件とセミコロンの間にステートメントがあることを期待しています。ここではステートメントが見つからないため、while ループは実行されますが、何もしません。それには体がありません。さらに、ループには本体がないため、変数 r が新しい値を想定する機会はありません。条件は常に true と評価され、ループは終了しません。
あなたの例で while ループの条件を否定する場合、つまり、
boolean r = false ; int s = 0 ;
while (r != false) ;
{
s = getInt() ;
if (!(s>=0 && s<=2)) System.out.println ("try again not a valid response") ;
else r = true ;
}
(間違ったセミコロンをそこに残したことに注意してください)、ループが実行されないため、意図したループ本体が正確に1回実行されることがわかります。
無関係な答えですが、Sunのスタイルガイドラインに従うことを本当にお勧めします。
boolean r = false ;
int s = 0 ;
while (r == false) {
s = getInt() ;
if (!(s>=0 && s<=2)) {
System.out.println ("try again not a valid response") ;
} else {
r = true ;
}
}
r
ループ自体で結果を評価すると、変数と if/else 条件を取り除くことができます。
int s = 0;
while( ( s = getInt() ) < 0 || s > 2 ) {
System.out.println( "Try again, not a valid response");
}