public class ma{
public static void main(String args[]) {
char x = 100;
while (x++ > 10){
x++;
}
System.out.printf("%d",(int)x);
}
}
输出结果:1
有详细解释一下为什么输出的结果是1吗?
当x=99的时候,为什么输出结果又是2了?
首先,
java里面,char是字符类型
最小值是 \u0000(即为0);
最大值是 \uffff(即为65,535);
char 数据类型可以储存任何字符;
当你的char x = 100 时,变量x实际上代表的是‘d’这个字符;
你直接执行System.out.println(x),会发现打印出来的就只是d
x最大值是65,535,当超过这个值,再执行x++,x就会从0重新开始
你的while里面(x++ > 10)就会不满足,因此跳出循环
这是为什么为输出1,或者2的原因
其次,
你有两次x++,所以每次执行循环,实际上x自加1了两次,因此每次执行循环,x实际上加了2
而最后一次判断while的时候(x++ > 10)里面x又加了1,但是跳出了循环,所以循环内x++不再执行,所以最后实际加了奇数
所以x初始值是奇数,最后结果就是偶数,x初始值是偶数,最后结果就是奇数
100对应的就是1,99对应的就是2
从程序执行顺序来分析最终结果为什么1和2,而不是0、3、65335等
while (x++ > 10){
x++;
}
//这串代码执行顺序中,
//重点是 while (x++ > 10),实际上是两步:
//1.判断 x > 10,大于10,继续执行,不大于10,跳出循环;
//2.执行x++自加,此时x=x+1;
//这里重点是首先执行判断,然后才会自加
//假设在某一次循环后,x=65534
//那么
//此时x=65534,进入判断,满足x>10,
while (x++ > 10){
//进入循环,此时x=65535;
x++;
//执行x++,此时x=0;
}
//再次执行判断,不满足 x > 10,但是既然会执行while (x++ > 10)中的x++,因此跳出循环,并且x=1;
//假设在某一次循环后,x=65535
//那么
//此时x=65535,进入判断,满足x>10,
while (x++ > 10){
//进入循环,此时x=0;
x++;
//执行x++,此时x=1;
}
//再次执行判断,不满足 x > 10,但是既然会执行while (x++ > 10)中的x++,因此跳出循环,并且x=2;
如果有用,请麻烦给个采纳
while (x++ > 10)
这里其实就是当x>255之后x++就变成0了。
因为有2次++,每次x都+2
所以x为偶数,254就不满足了,只有1次++,就是1,奇数255才不满足,就是2
代码的输出结果是1的原因在于while
循环中的条件x++ > 10
。在循环的每一次迭代中,x
都会先与10比较,然后再自增1。由于x
一开始是100,所以第一次循环时,x
递增到101。但是,在条件判断时,由于x
仍然大于10,所以循环继续执行。在第二次循环时,x
又会递增1,变为102。然而,条件判断时,x
已经不再大于10了,所以循环结束。因此,最后输出的结果是1。
当x
被赋值为99时,循环条件x++ > 10
仍然成立,因此x
会继续递增。在第一次循环时,x
递增到100,然后在第二次循环时,x
递增到101。因此,输出结果是2。
你的x是个字符,而不是整形,是个字符串,结果自然不对,应该吧char改成int