有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在2d数组上使用比较器对用户输入进行排序

我在互联网上搜索了如何使用这个comparator进行排序,但大多数都只显示了一维数组的示例,并且值不是用户输入的。我还从来没有用过这个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


共 (1) 个答案

  1. # 1 楼答案

    问题在于:

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

    该方法接收两个同名参数。将其更改为:

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