質問
次のような do while があります。
User user = userDao.Get(1);
do
{
// processing
// get the next user
//
user = UserDao.GetNext(user.Id);
if(user == null)
continue; // will this work?????????????
}
while ( user != null)
それが機能する場合、do ステートメントの先頭に移動し、user が null であるため、問題が発生するのでしょうか?
ループを while ステートメントに作り直したほうがよいでしょうか?
解決
続け、それは別の反復または終了を続行する必要がある場合、プログラムが評価することができますので、それはボタンでの評価にジャンプします。この場合は、終了します。
これは仕様です:ます。http:// javaのsun.comの/ docsに/書籍/ JLS / third_edition / HTML / statements.html#6045 の
あなたは、Java言語仕様でそれを検索することができます。このような言語の質問:ます。http:// javaの。 sun.com/docs/books/jls/する
他のヒント
これは実際にこのコードを記述するための最良の方法ではないでしょう。ユーザーがnullの場合は、あなたがしようとすると、NullPointerExceptionが取得し、周りに次の時間をuser.id取得します。これを行うには良い方法は以下のようになります:
User user = UserDao.Get(1);
while(user != null) {
// do something with the user
user = UserDao.GetNext(user.id);
}
なぜあなたは、2つの場所にユーザーをテストしていますか?ユーザーがnullのときwhile条件は、あなたが望むものである、ループを終了します。
はい、continue
はdo..whileループの場合に動作します。
あなたはおそらく、ユーザーの処理を停止、またはwhileループは、すぐにユーザーがとにかくnullであるようにして壊れますので、ちょうど完全にbreak
ビットを削除する代わりにcontinue
のif null continue
を使用したい。
短い答えはい、継続(とブレーク)do-while文では正しく動作します。
他の人として、あなたが続けるから、間違った行動を期待することができるように見えるの例から、しかし指摘しています。
見てみましょう:
$cat DoWhileContinue.java
class DoWhileContinue {
public static void main( String [] args ) {
int i = 0;
int y = 0;
do {
i++;
if( i > 100 ) {
continue;
}
y++;
} while( i < 500 );
System.out.printf("i=%d, y=%d %n", i, y );
}
}
$javac DoWhileContinue.java
$java DoWhileContinue
i=500, y=100
はい、そうです。このサンプルでは、次のことがわかります y
値は 100
なぜなら continue
ステートメントが実行され、その後変数が増加できなくなりました。
継続は冗長に見えながら、内側のループの評価ステートメントにジャンプします。私はブレークを使用するか、または(あなたの中の条件はすでにあなたのためにそれをチェックしている)だけでwhile条件が作業を行うようにする方が良いだろうと思います。