java - 为什么这个循环是不好的做法?

标签 java loops coding-style

以下循环不是好习惯。是否因为 Stringfor 循环的主要条件而不是 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/

相关文章:

java - 使用 JUnit 5 并行执行测试用例

java - 将自定义颜色与 SXSSF (Apache POI) 结合使用

c++ - 我是否错误地使用了 atoi?

c++ - 我应该定义默认构造函数吗?

Perl:将字符串转换为引用?

java - 每 100 个字符分割一次请求

Java 我的程序的数组没有显示任何值

java - 如何对 int[] 数组求和

java - for循环计算Java中的音节

php - 为什么查询中的额外空格和换行符不好?