Java 为什么两个相同的while循环行为不同
我已经挣扎了几个小时,找不到合理的解释。 下面是一个代码:Java 为什么两个相同的while循环行为不同,java,arithmetic-expressions,Java,Arithmetic Expressions,我已经挣扎了几个小时,找不到合理的解释。 下面是一个代码: int num = 1; while (num++ < 5); System.out.println(num); // Why num == 6 ?? 所以,问题是为什么num==6? 我认为此代码与以下代码相同: int num = 1; while (num < 5) num++; System.out.println(num); // num == 5 您的第一个while循环不执行任何操作,除了递增num之外-
int num = 1;
while (num++ < 5);
System.out.println(num); // Why num == 6 ??
所以,问题是为什么num==6?
我认为此代码与以下代码相同:
int num = 1;
while (num < 5) num++;
System.out.println(num); // num == 5
您的第一个while循环不执行任何操作,除了递增num之外-请参阅while语句后面的分号
由于一元增量在条件之后计算,num++<5将递增num直到其值为6,因为终止条件为num==5,然后num再次递增一次
在第二个示例中,num仅在条件适用时才递增,因此比第一个示例少一次
例1
将1分配给num
迭代数值:1增量是否晚于5?对
迭代数值:2的增量是否小于5?对
迭代数值:3的增量是否小于5?对
迭代数:4的增量是否小于5?对
迭代数值:5增量是否小于5?不,停下来
此时,num仍然增加1,因此num==6
例2
将1分配给num
迭代数:1是否小于5?是的,因此递增num
迭代数:2是否小于5?是的,因此递增num
迭代数:3是否小于5?是的,因此递增num
迭代数:4是否小于5?是的,因此递增num
迭代数:5是否小于5?否,停止而不递增
因此,num==5
您的第一个while循环不执行任何操作,除了递增num之外-请参阅while语句后面的分号
由于一元增量在条件之后计算,num++<5将递增num直到其值为6,因为终止条件为num==5,然后num再次递增一次
在第二个示例中,num仅在条件适用时才递增,因此比第一个示例少一次
例1
将1分配给num
迭代数值:1增量是否晚于5?对
迭代数值:2的增量是否小于5?对
迭代数值:3的增量是否小于5?对
迭代数:4的增量是否小于5?对
迭代数值:5增量是否小于5?不,停下来
此时,num仍然增加1,因此num==6
例2
将1分配给num
迭代数:1是否小于5?是的,因此递增num
迭代数:2是否小于5?是的,因此递增num
迭代数:3是否小于5?是的,因此递增num
迭代数:4是否小于5?是的,因此递增num
迭代数:5是否小于5?否,停止而不递增
因此,num==5
原因是比较是在num的增量之前完成的。因此num等于5时的步骤如下所示:
num = 5
num < 5, so exit loop
num++
num = 6
print num
是否使用了预增量,如while++num<5;那么num在循环结束时应该是5。原因是比较是在num的增量之前完成的。因此num等于5时的步骤如下所示:
num = 5
num < 5, so exit loop
num++
num = 6
print num
是否使用了预增量,如while++num<5;那么num在循环结束时应该是5;将首先将num与value进行比较,然后将其递增。例如,当num->5时,则5<5为false,因此循环将终止,但++将使num增加1
然而,在第二个示例中,即当num<5时,循环将在num->5和num++永远不会被调用时终止,因此num将是5而不是6;将首先将num与value进行比较,然后将其递增。例如,当num->5时,则5<5为false,因此循环将终止,但++将使num增加1
int num = 1;
while (num++ < 5);
System.out.println(num);
然而,在第二个示例中,即当num<5时,循环将在num->5时终止,并且num++将永远不会被调用,因此num将是5而不是6
int num = 1;
while (num++ < 5);
System.out.println(num);
这里的num每次都被比较和递增。因此,对于最后一次迭代,num增加,但条件失败。所以输出是6
int num = 1;
while (num < 5) num++;
System.out.println(num);
在这里,您将num与5进行比较,并递增num。对于上一次迭代,条件失败并且没有递增num。因此,输出为5
while (num++ < 5);
这里的num每次都被比较和递增。因此,对于最后一次迭代,num增加,但条件失败。所以输出是6
int num = 1;
while (num < 5) num++;
System.out.println(num);
在这里,您将num与5进行比较,并递增num。对于上一次迭代,条件失败并且没有递增num。因此,输出为5
while (num++ < 5);
第一次检查:1<5=正确;检查后:i=2;
第二次检查:2<5=正确;检查后:i=3;
第三次检查:3<5=正确;检查后:i=4;
第四次检查:4<5=正确;检查后:i=5;
第五次检查:5<5=错误;检查后:i=6;打破循环;
第一次检查:1<5=正确;检查后:i=2;
第二次检查:2<5=正确;检查后:i=3;
第三次检查:3<5=正确;检查后:i=4;
第四次检查:4<5=正确;检查后:i=5;
第五次检查:5<5=错误;打破循环;
第一次检查:1<5=正确;检查后:i=2;
第二次检查:2<5=正确;检查后:i=3;
第三次检查:3<5=正确;检查后:i=4;
第四次检查:4<5=正确;检查后:i=5;
第五次检查:5<5=错误;检查后:i=6;打破循环;
第一张支票:1
<5=正确;检查后:i=2;
第二次检查:2<5=正确;检查后:i=3;
第三次检查:3<5=正确;检查后:i=4;
第四次检查:4<5=正确;检查后:i=5;
第五次检查:5<5=错误;打破循环;
在这里,您在检查后增加了值
如果您正在寻找相同的循环,那么您需要执行一个类似as++num的增量,称为前缀,而不是称为后缀的num++,这样您的代码看起来就像
int num = 1;
while (++num < 5);
System.out.println(num);
现在,上述条件与
int num = 1;
while (num < 5) num++;
System.out.println(num);
在这里,您在检查后增加了值
如果您正在寻找相同的循环,那么您需要执行一个类似as++num的增量,称为前缀,而不是称为后缀的num++,这样您的代码看起来就像
int num = 1;
while (++num < 5);
System.out.println(num);
现在,上述条件与
int num = 1;
while (num < 5) num++;
System.out.println(num);
因为num++是一个表达式,其值为num的未加增量值,而num++<5;将以num递增1超过5结束
while num<5 num++;,语句num++;将只运行到num为4:最后一次运行语句后num的值将为5。因为num++是一个值为num的未加增量的表达式,而num++<5;将以num递增1超过5结束
while num<5 num++;,语句num++;将只运行到num为4:最后一次运行语句后num的值将为5。在比较循环的最后一次运行中,num++<5将首先比较,然后在中断循环之前,将1添加到num。因此结果将比另一个循环高1。当条件为false时,last run num将为5。在终止循环之前,它将添加1,即num将变为6ad,然后中断。而在另一个循环中,它不会移动到循环中,因此不会增加到6。在最后一次运行比较循环时,num++<5将首先进行比较,在打破循环之前,将1添加到num。因此结果将比另一个循环高1。当条件为false时,last run num将为5。在终止循环之前,它将添加1,即num将变为6ad,然后中断。在另一个循环中,它不会移动到循环中,因此不会增加到6。在第一种情况下,System.out.println不在While循环体中。因为若并没有大括号,那个么它就以一条语句作为主体,这意味着第一个出现的分号是一条语句。在您的情况下,它是一个空语句
; // is empty statement and valid
当它当时从while循环中出来num=6并在第一种情况下打印时,System.out.println不在while循环体中。因为若并没有大括号,那个么它就以一条语句作为主体,这意味着第一个出现的分号是一条语句。在您的情况下,它是一个空语句
; // is empty statement and valid
当它当时从while循环中出来num=6时,它会在一个简单的语句中打印它
; // is empty statement and valid
及
简单地说
; // is empty statement and valid
及
抱歉,如果问题非常明显,为什么两个相同的while循环行为不同因为它们不一样。显然。@Anarantt对于这样的情况,如果您发现自己花费了几个小时,您可以使用调试器一步一步地查看num的值,如果您不能手动推断它的值。如果问题非常明显,那么很抱歉为什么两个相同的while循环的行为不同因为它们不一样。显然。@Anarantt对于这样的情况,如果您无法手动推断num的值,您可以使用调试器一步一步地查看num的值。