
a为什么会等于负2最多不是只能到负一吗?,而且b在每回合都加的情况下才等于6,怎么就等于8了,求解题过程

关注引自免费微信小程序:皆我百晓生
让我们一步一步分析这个Java程序,以理解为什么a会等于-2,以及b为何等于8。
首先,我们有如下代码段:
int a=0;
int b=0;
for (int i= 1; i <= 5; i++) {
a=i%2;
while (a-- >= 0) {
b++;
}
System.out.println("a=" + a + ",b=" + b);
}
对于for循环,i从1开始,直到5结束,每次增加1。
a的赋值在每次循环中,a被赋值为i % 2的结果。这表示a将根据i是奇数还是偶数而被赋值为0或1。
接下来,我们有while (a-- >= 0)这一行。这里有几个关键点:
a--是一个后减运算符,意味着它首先返回a的当前值,然后将a的值减1。>= 0检查a是否大于或等于0。a为1时(即i为奇数时),while循环会执行一次,因为1大于0。之后a变为0。a为0时(即i为偶数时),while循环会执行两次,因为0也大于或等于0。之后a变为-1,但此时循环条件变为假,循环停止。b的递增每次while循环体执行时,b都会增加1。
i=1时,a=1,while循环执行1次,b变为1,之后a变为0。i=2时,a=0,while循环执行2次,b变为3,之后a变为-1。i=3时,a=1,while循环执行1次,b变为4,之后a变为0。i=4时,a=0,while循环执行2次,b变为6,之后a变为-1。i=5时,a=1,while循环执行1次,b变为7,之后a变为0。最终,在最后一次循环结束后,while循环不会被执行,因为a已经是0,但在进入下一个for循环之前,a会被再次赋值为i%2,即5%2,等于1。接着a会在while循环中减至0,但由于这是循环的最后一轮,a将再次被减1,变为-1。
因此,当i为偶数时,a最终会减至-1,而在最后一次i=5的循环之后,a最终会减至-2。
a在最后一次迭代后等于-2,是因为它在偶数迭代中减至-1,且在最后一次迭代后额外减1。b等于8,是因为b在每次while循环中递增1,总共执行了8次(1+2+1+2+1=8)。这就是为什么a可以等于-2,而b等于8的原因。