Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-基于条件函数返回for循环计数器_Java_If Statement_For Loop - Fatal编程技术网

Java-基于条件函数返回for循环计数器

Java-基于条件函数返回for循环计数器,java,if-statement,for-loop,Java,If Statement,For Loop,以下是我大学作业的部分代码 else if (!codeList.contains(userCode)) { i--; // i is the counter for the for-loop } else if (userQuantity[i]==0) { i--; } 第一部分确保如果用户输入错误的代码,计数器i不会增加1,或者更确切地说,它会从最

以下是我大学作业的部分代码

else if (!codeList.contains(userCode)) {
                    i--; // i is the counter for the for-loop
                }
else if (userQuantity[i]==0) {
                    i--;
                }
第一部分确保如果用户输入错误的代码,计数器i不会增加1,或者更确切地说,它会从最近增加的计数器中减去1。这部分很好用

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

为了避免混淆,我应该解释这是一个无限for循环(带有break语句)。我之所以做for循环是因为我必须这样做。是因为我的for循环,条件不起作用,还是我对它做了一些完全错误的事情?


这是我的大学作业,所以我希望答案有解释,而不仅仅是快速修复。如果你需要我解释,请让我知道。

这是非常糟糕的做法。将for循环更改为while循环,并且仅当

 codeList.contains(userCode)==true or userQuantity[i]!=0. 

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

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

for (int i = 0; i < 10; i++) {
    // ...
}
以及一条注释,解释为什么要在循环中更改
i
,以及这意味着什么

为了避免混淆,我应该解释这是一个无限for循环(带有break语句)。我之所以做for循环是因为我必须这样做。是因为我的for循环,条件不起作用,还是我做了一些完全错误的事情

我感觉您误解了要求(例如,您不需要为循环使用
),或者您的想法有误;i、 e.有一个更简单的解决方案,它不涉及反向计数器

(令人惊讶的是,编程练习会要求您编写大多数有经验的Java程序员都认为是糟糕代码的代码。简单的解释是,事实并非如此。)

无论哪种方式:

  • 出于Greg所述的原因,在
    for
    循环中更改循环变量是不好的做法

  • “无限循环”的想法真的很奇怪。以下是合法的Java

    for (int i = 0; true; i++) {
        ...
    }
    
    但写作的惯用方式是:

    int i = 0;
    while (true) {
        ...
        i++; // ... at the appropriate point / points
    }
    
    。。。在大多数情况下,这意味着您根本不需要使变量倒退


我对问题进行了进一步编辑,以避免将注意力集中在代码的错误部分。感谢到目前为止的帮助:-)我已经记下了所有关于未来练习的评论,但现在我需要按照作业说明进行操作。另一件需要注意的是,这是一门非常基础的Java课程,我是一名noob。谢谢,你的回答似乎帮了很大的忙。我想问,在循环中弄乱计数器仅仅是因为你上面写的“坏”还是有更多的原因?我想说这是主要原因。在Java中,没有任何技术原因导致不能在循环中为
循环控制变量更改
。也就是说,编译器允许您这样做,并且您可以根据Java规则对生成的代码进行推理。然而,由于代码的读取次数要比编写次数多得多,所以最好不要让读者对代码中的意外行为感到惊讶。例如,函数更改全局变量的值而不清楚地表明它正在这样做是完全合法的,但不一定是一个好主意。谢谢,这很有帮助。我的大学似乎有很多不好的做法。事实上,在教科书中,它说“while循环是你永远不必使用的东西”(意译)。现在这似乎是个谎言。是的,那是垃圾。然而,我要说的是,我使用
while{}
循环的频率远远高于
do{}while
循环。所以这里肯定有一个有用的尺度。@nickecarlo-那是什么教科书?我想把它添加到我不应该推荐给学生的课本列表中。我可以用一个while循环的delimeters把整个东西放进去,看看下次他们是否同意。
int i = 0;
while (true) {
    ...
    i++; // ... at the appropriate point / points
}