سؤال

لدي فعل بينما يبدو ذلك:

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، والمستخدم فارغ حتى تنكسر الأمور؟

ربما يجب علي إعادة صياغة الحلقة إلى بيان أثناء الوقت؟

هل كانت مفيدة؟

المحلول

إن الاستمرار يجعلها تقفز إلى التقييم عند Botton، لذلك يمكن للبرنامج تقييم إذا كان عليه الاستمرار في تكرار أو خروج آخر. في هذه الحالة سوف يخرج.

هذه هي المواصفات: http://java.sun.com/docs/books/jls/third_edition/html/statements.html#6045.

هذه الأسئلة اللغوية التي يمكنك البحث عنها في مواصفات لغة Java: http://java.sun.com/docs/books/jls/

نصائح أخرى

هذا حقا لن يكون أفضل طريقة لكتابة هذا الرمز. إذا كان المستخدم فارغا، فستحصل على nullpointerException عند محاولة الحصول على المستخدم. في المرة القادمة. وسيلة أفضل للقيام بذلك سيكون:

User user = UserDao.Get(1);
while(user != null) {
  // do something with the user
  user = UserDao.GetNext(user.id);
}

لماذا تختبر المستخدم في مكانين؟ ستنتهي الشرط الحلقة عندما يكون المستخدم فارغا، وهو ما تريده.

نعم، continue سوف تعمل في حلقة تفعل.

ربما تريد استخدام break بدلاً من continue لإيقاف معالجة المستخدمين، أو مجرد إزالة if null continue بت تماما منذ حلقة أثناء انتهاء الأمر بمجرد أن يكون المستخدم لاغيا على أي حال.

إجابة قصيرة نعم، متابعة (وكسر) تعمل بشكل صحيح في القيام أثناء الحلقات.

كما أشار آخرون إلى ذلك، من مثال يبدو أنك قد تتوقع أن يستمر السلوك الخاطئ.

دعونا نرى:

$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 تم تنفيذ البيان ومنع المتغير من زيادة زيادة بعد ذلك.

ستستمر وزارة الاستمرار إلى بيان تقييم الحلقة داخل الوقت الذي يبدو زائدة عن الحاجة إليه كما هو وتقييم نفس الشيء. أعتقد أنه سيكون من الأفضل استخدام استراحة أو ببساطة السماح في الوقت الذي يقوم به في حالة العمل (الشرط الخاص بك أثناء التحقق من ذلك بالفعل لك)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top