我偶然发现了这个问题Are "while(true)" loops so bad?
他们让我想到我通常做什么。令我惊讶的是,我意识到我几乎从未在我的专业代码(或工作代码)中使用while loop
。
前端框架,例如面等,不计算在内。
那我什么时候应该使用'while循环'?和
你多久使用一次while循环?
这是一个真实的问题,请不要因为主观而关闭我真的是在一个具体的例子之后。它不能用更好的替代品替代。
答案 0 :(得分:7)
我可能会使用它的地方是你需要以不同的方式处理序列的第一个元素。这使得foreach循环变得笨拙,但是while循环效果很好:
Iterator<String> iterator = foo.iterator();
// Handle the first item specially
if (!iterator.hasNext()) {
throw new SomeException("foo shouldn't be empty");
}
SomeResult result = new SomeResult(iterator.next());
// Now deal with the rest
while (iterator.hasNext())
{
String item = iterator.next();
result.addItem(item);
}
此外,我使用while
循环作为少数几个我将在条件中包含作业的地方之一:
String line;
while ((line = reader.readLine()) != null)
{
// Handle the line
}
或InputStream
:
int bytesRead;
while ((bytesRead = input.read(buffer)) != -1)
{
// Handle the buffer
}
答案 1 :(得分:3)
java.util.Scanner scanner = //...
while(scanner.hasNextLine()) {
String line = scanner.nextLine();
//..do sth with the line
}
事实上,每个while
循环都可以替换为for
。但是例如在上面的代码中,它的可读性会降低 - 这就是重点:当它更适合问题的本质时使用while
。
答案 2 :(得分:1)
你应该使用它循环,而某些条件成立。
答案 3 :(得分:1)
简单永不停止的后端逻辑:
while (true) {
consumeMessage();
}
或者
for (;;) {
consumeMessage();
}
答案 4 :(得分:1)
当你不知道需要多少次迭代时,你应该使用它。 你只知道你想在满足你的条件时做点什么。它可以被迭代2次,100次,0次......
答案 5 :(得分:1)
当然你总是可以将while循环重写为for循环,但通常它更加丑陋,这意味着for(...; ..; ..)的部分留空 - 主要是初始化。在这种情况下,Findbugs也会发出警告:类似于“检测到简单的循环,将其重写为while循环”。
while循环的主要应用是你不需要初始化,或者想要特别处理第一次循环迭代(例如枚举的第一个元素),在这种情况下你也要预先进行初始化。
答案 6 :(得分:0)
在代码中有一个主循环时使用它,直到某些内容发生变化。
当你不需要一个计数器,并且你不需要迭代一个集合时(因为那时你需要一个计数器)。
使用for(; whatever;)是丑陋的代码,那就是你必须使用一段时间的代码。
同样的变化,做...虽然允许你至少做一次然后可能多次。