我有一个练习来输出用户输入的所有字符串升序。
当用户输入“quit
”时程序应该停止。如何使用比较器与arraylist
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Collections;
public class Exercise2{
public static void main (String[] args) {
ArrayList<String> list=new ArrayList<>();
Scanner scanner = new Scanner(System.in);
String word="string";
while(!word.equals("quit")){ // cycle will continue till string will contain a word "quit".
System.out.println("Please enter a string line. String can be whatever you want. After you enter a string please press Enter");
word=scanner.nextLine();
if(word.equals("quit"))
break;
list.add(word);
}
Collections.sort(list, new Comparator<String>(){
public int compare(String o1, String o2){
if(o1.length()>o2.length()){
return 1;
}else{
return o1.compareTo(o2);
}
}
});
System.out.println(list);
}
}
任何人都可以解释为什么我的代码不工作?
我想用比较器来做。
你是什么意思的“升序”?这与String的自然排序有何不同? (如果不是,你为什么要编写你自己的比较函数而不是使用自然顺序?) – azurefrog
你能举一个你输入的例子吗?然后显示预期产出和实际得到的结果?这将帮助我们理解“不工作”的含义。 –
您的比较函数首先检查一个字符串是否比另一个更长,如果不是,则使用比较字符串的自然顺序。不知道背后的逻辑应该是什么。我猜想这会打破比较方法的契约。 –