[英]How to implement selection sort with a comparator in Java
我正在开发一个程序来对字符串列表执行选择排序。 该程序的输入是 6 个字符串。 该程序的 output 应该是按最后一个字符排序的字符串列表。
这是我试过的
import java.util.Arrays;
import java.util.Scanner;
import java.util.List;
import java.util.Comparator;
public class Exercise_20_21 {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
System.out.print("Enter 6 strings: ");
// Step 1: proccess strings from input
String data = input.next();
String[] list = data.split(" ");
for(int i=0; i < list.length; i++){
System.out.print(list[i]+" ");
}
selectionSort(list, new Comparator<String>(){
@Override
public int compare(String w1, String w2){
if(w1.charAt(0) > w2.charAt(0)){
return -1;
}
else if( w1.charAt(0) < w2.charAt(0)){
return 1;
}
else {
return 0;
}
}
});
for(int i=0; i < list.length; i++){
System.out.print(list[i]+" ");
}
}
public static <E> void selectionSort(E[] list, Comparator<? super E> comparator) {
Arrays.sort(list,comparator);
}
}
预期的:
Enter 5 strings: red blue green yellow orange pink
red blue orange pink green yellow
实际的:
Enter 6 strings: red blue green yellow orange pink
red red
我怎样才能开始调试这段代码?
您的代码的问题不在于比较器本身。 您可能希望使用input.nextLine()
来读取整行。 使用next
将只读到下一个定界符(在您的情况下为空格)。
对于比较器部分,Java已经提供了比较器,用于比较字符串和其他对象。 这是Comparator.naturalOrder()
并且可以这样使用:
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
System.out.print("Enter 6 strings: ");
// Step 1: proccess strings from input
String data = input.nextLine();
String[] list = data.split(" ");
System.out.println(Arrays.toString(list));
selectionSort(list, Comparator.naturalOrder());
for (String s : list) {
System.out.print(s + " ");
}
}
public static <E> void selectionSort(E[] list, Comparator<? super E> comparator) {
Arrays.sort(list, comparator);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.