私はそれが次のように見える間やることがあります:
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ステートメントの先頭に移動し、ユーザーはnullであるため、問題が発生しますか?
たぶん私はループをwhileステートメントに作り直す必要がありますか?
続行すると、ボタンの評価にジャンプするため、プログラムは、別の反復または終了を続行する必要があるかどうかを評価できます。この場合、終了します。
これは仕様です: http://Java.Sun.com/docs/books/jls/third_edition/html/statements.html#6045
このような言語の質問は、Java言語仕様: http://Java.Sun.com/docs/books/jls/ で検索できます。
これは、このコードを書くための最良の方法ではありません。 userがnullの場合、次回user.idを取得しようとすると、NullPointerExceptionが発生します。これを行うためのより良い方法は次のとおりです。
User user = UserDao.Get(1);
while(user != null) {
// do something with the user
user = UserDao.GetNext(user.id);
}
なぜ2か所でユーザーをテストしているのですか? while条件は、ユーザーがnullの場合にループを終了します。これは、必要なことです。
はい、continue
はdo..whileループで機能します。
break
の代わりにcontinue
を使用してユーザーの処理を停止するか、ユーザーがnullになるとすぐにwhileループが発生するため、if null continue
ビットを完全に削除することをお勧めします。 。
続行は、while内のループ評価ステートメントにジャンプします。これは、ifとwhileが同じものを評価しているように冗長に見えます。休憩を使用するか、単にwhile条件で作業を行う方がよいと思います(while条件で既にチェックされています)
短い答えはい、続行(および中断)はdowhileループで適切に機能します。
しかし、他の人が指摘しているように、この例からは、続行すると間違った動作が予想されるように見えます。
どれどれ:
$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
ステートメントが実行され、後で変数が増加するのを防いだため、continue
値が100
であることがわかります。