0

我是 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);
    }
    }

}
4

3 回答 3

2

根据while定义,循环继续执行其主体,直到其条件(在本例中为变量loop)评估为false。您永远不会在 -loop 的主体中设置loop为,因此条件永远不会评估为并且循环永远不会结束。falsewhilefalse

此外,您似乎想要对用户输入的单词列表进行排序。我不建议调用Collections.sort循环的每次迭代。也许考虑使用一种数据结构来保持其元素自行排序,例如TreeSet. 或者,至少,只sort在循环之后直接调用该方法一次。

于 2013-04-17T19:40:41.533 回答
2
while(condition) {
     /* do something */
}

表示 /* 做某事 */ 发生,除非条件 == false,在你的情况下它总是为真,这就是它不会停止的原因。因此,Java 在您的情况下表现良好。

于 2013-04-17T19:41:09.107 回答
0

while(loop)在你的程序中loop总是有值true是所谓endless loop的,顾名思义,它永远不会结束,这就是你正在经历的。

要使循环停止,您必须将 的值设置loopfalse是否满足某些条件或使用关键字终止循环break

一个条件可能是例如有一个特定的词女巫让你的循环在输入时终止,比如"exit"

这是一个示例,您可以如何设置loopfalse

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被禁止从您的数组列表可以包含的集合中,但您可以更改程序以将其保存。

于 2013-04-17T20:05:20.120 回答