2015-08-02 2 views
2

сказать, что я делать-то время цикла, как это:Хотя петли булева переназначения

public class Main { 
    public static void main(String[] args) { 
     boolean b = false; 
     int i = 1; 
     do { 
      i++; 
     } while (b = !b); 
     System.out.println(i); 
    } 
} 

Что бы вызвать i для увеличения в общей сложности три? Я могу понять, что этот цикл гарантирует, что он будет запущен хотя бы один раз, но в этом случае логическое значение b переназначается в true, не приведет ли это к бесконечному циклу?

+6

'b =! B' переводит' b' в обратную сторону, что бы это ни было. В первый раз 'b' начинается как' false', поэтому он перенаправляется на 'true'. Во второй раз 'b' начинается как' true', поэтому он переназначается на 'false', а затем цикл завершается. Надеюсь, это упражнение для проверки вашего понимания Java. ** Никогда ** не пишите код, как это в реальной жизни, с присвоением булевской переменной удвоения в качестве условия. Трудно следовать. – ajb

+0

Да, это вопрос упражнений. Спасибо за ваше объяснение, я не поймал другой кусок, где он будет перевернут на ложный, примеры, подобные этим, могут быть очень неприятными для понимания. Я ценю это! – hexobolic

+3

@ajb любой конкретной причине _not_, чтобы опубликовать это как ответ? –

ответ

2

здесь объяснений вашего кода ..

  • intially значение b=false i=1;
  • ввести в петлю и приращение i=2;
  • проверка while состояние b=!b средства b=true;
  • еще раз goto цикл и приращение i=3;
  • проверка while состояние b=!b означают b=fase и выход из while петли
  • теперь к значению SOP и printi «s, который 3 и выход из программы
1

две вещи, чтобы отметить здесь. b=!b как условие проверки означает, что присваивают значение дополнения b, а затем проверяют соответствие условий. Как мы знаем, цикл while-while выполняется хотя бы один раз, значения равны трем.

2

Перед циклом, i = 1 и b = false.

----------+--------+--------+ 
Pass  | 1  | 2  | 
----------+--------+--------+ 
i   | 2  | 3  | 
----------+--------+--------+ 
b   | false | true | 
----------+--------+--------+ 
condition | !false | !true | //loop breaks 
----------+--------+--------+ 
Смежные вопросы