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
}