我可以看到这个话题已被大量讨论,但是,在之前的讨论中,我无法找到问题的答案。话虽这么说,我有一个非常简单的问题,我想要求用户输入城市列表。输入后,我将列表存储在ArrayList城市中,并使用collections.sort对它们进行排序。出于某种原因,collections.sort没有对我的ArrayList进行排序。示例:用户输入是"亚特兰大,华盛顿特区,纽约"。运行程序时,我的输出未排序。
public class CitySortDemo {
public static void main(String[] args) {
ArrayList<String> cities = new ArrayList<String>();
Scanner input = new Scanner(System.in);
System.out.println("enter as many cities as you can!");
cities.add(input.nextLine());
Collections.sort(cities);
for (int i = 0; i < cities.size(); i++){
System.out.println(cities.get(i));
}
}
}
答案 0 :(得分:3)
您的代码会在集合"Atlanta, Washington DC, New York"
中添加单个字符串。只有一个条目的集合不受排序的影响。 : - )
你可能打算打破这个字符串,也许是把它分成逗号:
cities.addAll(Arrays.asList(input.nextLine().split("\\s*,\\s*")));
将一个字符串拆分为逗号数组,可选地在前面和/或后面加上空格,并将它们全部添加到集合中。
答案 1 :(得分:1)
您可以询问用户有多少城市需要排序或指定一个字符,当它被看到时,停止输入并对它们进行排序。在你的代码中,它只需要一行作为字符串。例如,它会占用城市,直到用户输入代码为!
的说明符字符然后排序。
import java.util.*;
class CitySortDemo {
public static void main(String[] args) {
final String specifier = "!";
String str;
ArrayList<String> cities = new ArrayList<String>();
Scanner input = new Scanner(System.in);
System.out.println("enter as many cities as you can!");
str = input.nextLine();
while (! str.equals(specifier)) {
cities.add(str);
str = input.nextLine();
}
Collections.sort(cities);
cities.forEach(System.out::println);
}