理解do-while循环

时间:2013-12-14 22:20:18

标签: java loops do-while

我正在进行oracle认证的Java SE7程序员联合实践考试(书中),并且遇到了一个问题,即使有解释,我也不明白答案。 这是解释和代码:

  

它将打印3.循环体执行两次,程序将打印3。

我不明白循环体是如何执行两次的,也许我不明白b=!b的意思。有人可以解释一下吗?

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

5 个答案:

答案 0 :(得分:4)

b = !b是一个 赋值 ,它将b的倒数分配给自身(有效地在true和false之间翻转)

在java中,赋值返回已分配的内容(以便a=b=1成为可能)

因此while (b=!b)将翻转b的值,然后检查b的值。

答案 1 :(得分:1)

b=!b

永远是真的,为什么? 因为,你正在做的是你插入“b”相反的值(T-> F,F-> T),如果没有问题,while (b = !b);将返回TRUE ....登记/> 因此,在您的情况下,while (b = !b);将始终返回true

答案 2 :(得分:1)

迭代1

boolean b = false; 
int i = 1; 
do{ 
    i++ ; // i = 2
} while (b = !b); // b = !false = true so one more execution

迭代2

do{ 
    i++ ; // i = 3
} while (b = !b); // b = !true = false so loop breaks

所以它会打印3。简单:))

实际上,混淆是=符号。 =分配运算符,其中==是条件运算符。第一个将分配值,而稍后将检查条件。您可以使用它并获得其他结果,如

int a = 6;
int b = 10;
System.out.println(a = b);
System.out.println(a == b);

你会明白的。

答案 3 :(得分:1)

在第一次迭代结束时,由于增量运算符,变量i将为2。表达式b=!b将生成trueb = !false)并将变量b设置为true。所以循环再次执行。

在第二次迭代结束时,变量i现在是3。表达式b=!b将生成falseb = !true),这也是变量b的值。因此整个do-while-loop终止,println()语句显示3

请记住:=(assign运算符)与==(相等检查)不同。

答案 4 :(得分:0)

条件

b = !b;

使用赋值运算符,该运算符返回已分配的值。

最初,b为false,因此true已分配给b,并用于此条件。因此while循环第二次执行。在此执行中,b为真,因此false被分配给b并用于循环条件。因此循环退出。