首页 > 解决方案 > 如何在二维数组上使用比较器对用户输入进行排序

问题描述

我已经在互联网上搜索了如何comparator在排序中使用它,但其中大多数只显示单维数组的示例,并且值不是用户输入。我从来没有用过这个comparator

我已经尝试了一些我在这个网站上找到的例子,但是由于我还没有尝试使用比较器,所以导致了我还不知道的错误。

UPDATE: The code is finished but there's an error on the output

import java.util.*;

public class OhBoy{
public static void main(String[] args){
    Scanner sc = new Scanner(System.in);

    char userchoice;

    String[] org = {"ID","AT","CBT","P"};
    String[] orga = {"ID","Arrival Time","CPU Burst Time","Priority"};

    String[][] infos = new String[5][4];

    //Reminder
    System.out.println("***When setting priority 1 is highest and 5 is lowest***");
    System.out.println();
    System.out.println();

    //End user inputs values
    for(int a = 0;a<5;a++){
        for(int b = 0;b<4;b++){
            System.out.print(orga[b]+": ");
            infos[a][b] = sc.next();
        }
        System.out.println();
    }


    System.out.println();
    System.out.println();

    System.out.println("--Choose sorting method--");
    System.out.println("--------");

    System.out.println();

    System.out.println("1 - Arrival Time");
    System.out.println("2 - CPU Burst Time");
    System.out.println("3 - Priority");

    System.out.println();
    System.out.print("Your choice: ");
    userchoice = sc.next().charAt(0);


    for(int c = 0;c<4;c++){
        System.out.print(org + "\t");
    }

    System.out.println();


    if(userchoice == 1){
        Arrays.sort(infos, new SortByArrival());
        print(infos);
    } else {

    }


}

public static void print(String[][] infos){
    for (String[] array : infos){
        for (String s : array){
            System.out.print(s + " ");
        }
    System.out.println();
    } 
}
}



class SortByArrival implements Comparator{
public int compare(final Object infoss1, final Object infoss2){
    final String f1 = ((String[])infoss1)[1];
    final String f2 = ((String[])infoss2)[1];
    return f1.compareTo(f2);
}
}

这是尝试打印排序数组时弹出的错误

[Ljava.lang.String;@90f6bfd [Ljava.lang.String;@90f6bfd [Ljava.lang.String;@90f6bfd [Ljava.lang.String;@90f6bfd

标签: javaarrayscomparator

解决方案


问题在这里:

public int compare(String[][] infoss, String[][] infoss){

该方法接收 2 个具有相同名称的参数。将其更改为:

public int compare(String[][] infoss1, String[][] infoss2){

推荐阅读