我是Java世界的新手。我写了这个程序,它读取字符串数组......当我运行它时,它永远不会停止?!!我应该添加/更改什么才能使其结束扫描?
import java.util.*;
public class Ex21 {
public static void main(String[] args) {
int i, n = 5;
String c;
ArrayList<String>words = new ArrayList<>();
System.out.println("Enter multi strings: ");
Scanner input = new Scanner(System.in);
boolean loop = true;
while(loop) {
words.add(input.next());
Collections.sort(words);
System.out.println("The sorted list is: " + words);
}
}
}
答案 0 :(得分:2)
根据定义,while
循环继续执行其正文,直到其条件(在本例中为变量loop
)计算为false
。您从未在loop
- 循环的正文中将false
设置为while
,因此条件永远不会评估为false
,并且循环将永远不会结束。
此外,您似乎想要对用户输入的单词列表进行排序。我不建议在循环的每次迭代中调用Collections.sort
。也许考虑使用一种数据结构来保持其元素自己排序,例如TreeSet
。或者,至少在循环之后直接调用sort
方法一次。
答案 1 :(得分:2)
while(condition) {
/* do something */
}
表示/ *做某事* /发生,除非条件==假,在你的情况下它始终是真的,这就是为什么它不会停止。所以Java在你的情况下表现良好。
答案 2 :(得分:0)
while(loop)
loop
在您的计划中始终具有值true
,这就是所谓的endless loop
,正如名称所说,它永远不会结束,这就是您所遇到的。
要进行循环停止,您必须在满足某些条件时将loop
的值设置为false
,或使用关键字break
终止循环。
条件可能是例如有一个单词巫婆让你的循环在输入时终止,类似于"exit"
以下是如何将loop
设置为false
String word = input.next();
boolean loop = ! "exit".equalsIgnoreCase(word);
while (loop) {
words.add(word);
Collections.sort(words);
System.out.println("The sorted list is: " + words);
word = input.next();
loop = ! "exit".equalsIgnoreCase(word);
}
System.out.println("Bye!");
以下是另一个使用break
while (true) {
String word = input.next();
if("exit".equalsIgnoreCase(word)) {
break;
}
words.add(word);
Collections.sort(words);
System.out.println("The sorted list is: " + words);
}
System.out.println("Bye!");
请注意,单词exit
在您的arraylist可以包含的集合中被禁止,您可以更改程序,但也可以保存它。