質問
どの動きに期待していた時のこのコード:
do while(testA) {
// do stuff
} while(testB);
までのように振る舞い:
do {
while(testA) {
// do stuff
}
} while(testB);
または:
if(testA) {
do {
// do stuff
} while(testA && testB);
}
または何か全く予期せぬ?
私はこの質問だと思うからこれは非常に曖昧で、その他の人を探すこと ない なので私は怠ける試験です。
解決
それはあなたの最初のブロックに相当します:
do {
while(testA) {
// do stuff
}
} while(testB);
Javaの文法rel="noreferrer">のこれはされて解析するときます:
DoStatement:
do Statement while ( Expression ) ;
Statement:
WhileStatement
WhileStatement:
while ( Expression ) Statement
Statement:
Block
Block:
{ BlockStatements_opt }
あなたはJavaコンパイラはdo <WhileStatement> while ( Expression ) ;
としてこれを解析することがわかります。それはあなたが書いたコードを解析するための唯一の有効な方法です。
それは、この構造を解析するために特別なルールを持っていないことに注意してください。それはちょうどによるDO-whileループが書かれている異常な方法に人間が読むことのために混乱されて終わります。通常の使用では、しばらくはない、常に明示的な中括弧とdo { ... } while
として書かれています。
他のヒント
でも、その行動に依存してどういう条件において試験をします。E.g.このコード:
int i = 2;
int j = 4;
do while(j > 0) {
i--; j--;
System.out.println("i:" + i + " j:" + j);
} while(i > 0);
出力:
i:1 j:3
i:0 j:2
i:-1 j:1
i:-2 j:0
その作品のように:
while(j>0) {
}
は交換によっては、変数名:
do while(i > 0) {
//.. same as above
} while(j > 0);
の出力です:
i:1 j:3
i:0 j:2
ようでした動作と同じもの(すなわち最初がる)ですが、ここでは、 の適用が終了!
概要:
時 testA
は 不満足 となり testB
も 不満足, は、コード作品のように通常の while(testA){}
ループを実行します。
もの: られる場合には、時 testA
は 満足しなくなってい, testB
まだ満足, のループ ない 行くのスクリプト せ終了.この場合に限り、条件の"外"ループする必要が内側のループを実行します。
更新:
後で読むその他の答えを実現し、このメソッドは、入れ子の挙動 do-while
- while
ループを実行します。
とにかく、教訓:ご使用にならないでください。ような構文できるので混同していません)
これは
のように振る舞いますdo {
while(testA) {
// stuff
}
} while(testB);
そこで、コードのそのブロックがこのように解析されます:
TESTBが真である間、{コードブロックを}行います。ここで、{コードのブロック}インナーつつある。
これは、そのようなコードを書くために、確かに少し珍しいです:)
答えは#1です。それは限りtestB
が満たされるとループし続けますが、testA
が満たされない場合には、コードを実行されません。
"do {} while();
" "while(){}
" とは、別であるが、一方の構築物である。
「do while
」のようなものはありません。あなたは不注意でそれらを入れ子にして、{}は、単一の手順については、オプションであるという事実を利用している。
言い換えれば、これは法的な構文です。
do System.out.println("Hello World") while (true);
などif
-文で、ブロックは、単一の文として扱われます。
あなたの最初の可能な答えは「while(){}
は」外側「do {} while();
」
私は、このコードは合法であるとは思いません。
do while(testA) {
// do stuff
} while(testB);