Java While循环布尔重分配

Java While循环布尔重分配,java,Java,假设我有这样一个do while循环: 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总共增加三个?我可以理解这个循环将

假设我有这样一个do while循环:

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,这不会导致无限循环吗?

下面是对代码的解释

  • b的初始值=false i=1
  • 在循环中输入并递增
    i=2
  • 检查
    while
    条件
    b=!b
    表示
    b=true
  • 再次转到循环并递增
    i=3
  • 检查
    while
    条件
    b=!b
    平均值
    b=fase
    并退出
    while
    循环
  • 现在转到
    SOP
    print
    i
    的值,即
    3
    并退出程序

    • 这里需要注意两件事<代码>b=!b作为条件检查意味着分配
      b
      的补码值,然后检查条件满足情况。正如我们所知,当循环至少执行一次时,值变为三

      在循环之前,
      i=1
      b=false

      ----------+--------+--------+
      Pass      | 1      | 2      |
      ----------+--------+--------+
      i         | 2      | 3      |
      ----------+--------+--------+
      b         | false  | true   |
      ----------+--------+--------+
      condition | !false | !true  | //loop breaks
      ----------+--------+--------+
      

      b=!b
      b
      翻转到相反方向,不管它是什么。第一次,
      b
      false
      开头,因此它被重新分配到
      true
      。第二次,
      b
      true
      开始,因此它被重新分配到
      false
      ,然后循环退出。我希望这是一个测试您对Java理解的练习。在现实生活中,永远不要编写这样的代码,将布尔变量的赋值加倍作为一个条件。很难理解。是的,这是一个练习题。谢谢你的解释,我没有看到另一篇文章会被翻回false,像这样的例子理解起来会非常令人沮丧。我很感激@ajb有什么特别的理由不把它作为答案发布吗?@BenKnoble可能只是一个偏好,如果我不想提供更深入的解释,就不发布真正简短的答案…@ajb公平。另外,在通用电气低代表联盟中,我想这一点也没有那么重要