以下循环不是好习惯。是否因为 String
是 for
循环的主要条件而不是 int
变量,这意味着 for
循环是无限的?还有,是不是因为没有实例进入'end'来停止循环?
Scanner in = new Scanner(System.in);
int i = 0;
for (String s = in.next(); !s.equals("end"); i++)
{
System.out.println("The value of i is: " + i + " and you entered " + s);
}
如何重写它,使其符合公认的风格?
(这是过去试卷中的一个问题。)
最佳答案
你的字符串 s
永远不会改变,这会导致无限循环。你可能想要:
for (String s = in.next(); !s.equals("end"); s = in.next(), i++) {
...
}
有些人(包括我)可能会说 i++
不应该在这个循环的增量部分,因为它与条件没有直接关系:
for (String s = in.next(); !s.equals("end"); s = in.next()) {
...
i++;
}
Is it due to a string being the main condition of the for loop rather than an int variable, meaning the for loop is infinite?
原始循环确实是无限的(至少在输入初始输入并假设 "end"
不是第一个输入之后)。但是,这不是您所说的原因。 For 循环最常使用积分循环控制变量编写,但并非总是如此。例如,遍历链表的常见习语是:
for (Node node = list.head; node != null; node = node.next) {
...
}
你的循环的问题是字符串 s
永远不会改变,所以它永远不会等于 "end"
除非这是第一个输入。
关于java - 为什么这个循环是不好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21096276/