2011-12-29 4 views
1

Почему следующий код выполняется шесть раз? Пожалуйста, помогите мне понять, как это работает, поскольку я попытался получить это в голову без успеха.Справка по Java-do для пояснения необходимости

Я думал, что это будет первым выполнить код раз, а затем увеличить количество до , выполнить его в второй раз, увеличить количество до , выполнить его третий раз, увеличить количество до , выполнить его четвертый раз, чтобы увеличить количество , выполнить его в пятый раз , увеличить количество до 5, а затем остановиться. Это означает, что он выполнил цикл пять раз (в первый раз, затем, когда счет равен 1, 2, 3, 4).

int count = 0; 

    do { 

     System.out.println("Welcome to Java!"); 

    } while (count++ < 5); 

ответ

2

Вы пробовали работать this code?

int count = 0; 

do { 

    System.out.println("Welcome to Java! " + count); 

} while (count++ < 5); 

выход:

Welcome to Java! 0 
Welcome to Java! 1 
Welcome to Java! 2 
Welcome to Java! 3 
Welcome to Java! 4 
Welcome to Java! 5 

Это поможет вам понять, что происходит. Другие говорили, что ваше замешательство, скорее всего, связано с тем, как работает оператор post increment.

Чтобы помочь вам понять заранее и пост операторы инкремента позволяет запускать another code sample

int a = 0; 
int b = 0; 
System.out.println("pre increment "+ ++a); 
System.out.println("post increment "+ b++); 

выход:

pre increment 1 
post increment 0 

Резюмируя: с пост приращению выражение вычисляется перед тем увеличивается переменная , с предварительным приращением выражение оценивается после variabl e увеличивается.

1

Его оператор постфикса так первый evalution всего выражения, то приращение

управления будет течь, как этот

0 
Welcome to Java! 
//condition check : 0 then 1 
Welcome to Java! 
//condition check : 1 then 2 
Welcome to Java! 
//condition check : 2 then 3 
Welcome to Java! 
//condition check : 3 then 4 
Welcome to Java! 
//condition check : 4 then 5 
Welcome to Java! 
//condition check : 5 then 6 
+0

'count ++' выполняется после выполнения сравнения. – ZeissS

0
count++; // <-- would execute the above code 6 times 

является пост инкремент и

++count; // <-- would execute the above code 5 times 

предварительно приращение

Рассмотрим:

while (count++ < 5) System.out.println(count); // prints 1 2 3 4 5 
while (++count < 5) System.out.println(count); // prints 1 2 3 4 

Таким образом, ваш do...while выполняет первый без сравнения (из-за дел), а затем запускает сравнение.

Если это Преинкремент он может быть повторно записана следующим образом:

int count = 0; 
do { 
    // print 
    count = count + 1; 
} while (count < 5) 

Если это пост-инкремент он может быть повторно записана следующим образом:

int count = 0; 
while (count < 5) { 
    // print statement 
    count = count + 1; 
} 
1

Это потому, что вы используете пост-инкремент. Сначала оценивается условие while (значение count от до приращение), а затем count увеличивается.

Попробуйте ++count (который сначала увеличивает, а затем возвращает значение).

редактировать:

Обратите внимание, что хотя использование его в

for(int i = 0; i < n; i++) {} 

нормально (это, как правило, получают оптимизированная и т.д.),

for(int i = 0; i < n; ++i) {} 

немного лучше от семантическая точка зрения ИМО.

Он становится еще более сложным в языках с перегрузкой оператора, где i ++ может иметь разные побочные эффекты, чем ++ i.

Смежные вопросы