29

私はそれが次のように見える間、やることがあります:

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 ステートメントに作り直す必要がありますか?

4

7 に答える 7

46

続行すると、ボタンの評価にジャンプするため、プログラムは別の反復または終了を続行する必要があるかどうかを評価できます。この場合、終了します。

これは仕様です: http://java.sun.com/docs/books/jls/third_edition/html/statements.html#6045

このような言語に関する質問は、Java 言語仕様で検索できます: http://java.sun.com/docs/books/jls/

于 2010-01-06T21:55:14.590 に答える
6

これは、このコードを記述する最良の方法ではありません。user が null の場合、次回 user.id を取得しようとしたときに NullPointerException が発生します。これを行うより良い方法は次のとおりです。

User user = UserDao.Get(1);
while(user != null) {
  // do something with the user
  user = UserDao.GetNext(user.id);
}
于 2010-01-06T21:55:40.893 に答える
3

はい、continuedo..while ループで動作します。

ユーザーの処理を停止するbreak代わりに使用するか、とにかくユーザーが null になるとすぐに while ループが発生するため、ビットを完全に削除することをお勧めします。continueif null continue

于 2010-01-06T21:51:32.460 に答える
3

なぜユーザーを 2 か所でテストしているのですか? while 条件は、ユーザーが null の場合にループを終了します。これが必要です。

于 2010-01-06T21:52:28.730 に答える
1

短い答えはい、続行 (および中断) は do while ループで適切に機能します。

ただし、他の人が指摘しているように、この例から、続行から間違った動作を期待しているように見えます。

于 2010-01-06T21:51:40.680 に答える
0

continue は、 if と while が同じものを評価しているため、冗長に見える while 内のループ評価ステートメントにジャンプします。ブレークを使用するか、単に while 条件を機能させる方がよいと思います (while 条件は既にチェックしています)。

于 2010-01-06T21:51:04.253 に答える
0

どれどれ:

$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値が表示されていることがわかります。100continue

于 2010-01-06T22:02:12.347 に答える