質問

次のような 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ビットを削除する代わりにcontinueif 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条件が作業を行うようにする方が良いだろうと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top