Java - 根据条件转回for循环计数器

nic*_*o_c 2 java for-loop if-statement

以下是我的大学任务代码的一部分.

else if (!codeList.contains(userCode)) {
                    i--; // i is the counter for the for-loop
                }
else if (userQuantity[i]==0) {
                    i--;
                }
Run Code Online (Sandbox Code Playgroud)

第一部分确保如果用户输入错误的代码,则计数器i不会递增1,或者更确切地说,它从最近递增的计数器中减去1.这部分工作正常.

然而,第二部分是我似乎遇到的问题.userQuantity []是一个int数组,它必须是一个数组.这似乎对代码没有任何作用.即使为数量输入0,它仍然会增加不希望的计数器.

我应该解释一下,为了避免混淆,这是一个无限的for循环(带有break语句).我做for循环的原因是因为我需要.是因为我的for循环条件不起作用还是我做了一些完全错误的事情?

这是我的大学任务所以我会很感激答案的解释,而不仅仅是快速修复.如果您需要我解释,请告诉我.

Gre*_*ill 10

虽然它在Java中并不严格违法,但在循环中更改for循环控制变量的值并不是一个好主意.(这种修改在其他一些语言中非法的.)

通过更改循环中的循环迭代变量,您将弄乱使用循环所提供的隐式假设for.例如,如果读者看到:

for (int i = 0; i < 10; i++) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

读者会理所当然地认为循环的目的是执行10次(如果有的话,则不超过10次break).但是,如果要更改i循环内的值,则此假设不再有效.

如果您必须更改计数器的值,我建议将其写为while循环:

int i = 0;
while (i < 10) {
    // ...
    i++;
}
Run Code Online (Sandbox Code Playgroud)

以及解释为什么你i在循环内改变以及它意味着什么的注释.