【问题标题】:How the Arrays.sort works after the Comparable interface is done in java在 Java 中完成 Comparable 接口后 Arrays.sort 如何工作
【发布时间】:2020-09-08 13:13:00
【问题描述】:

代码是按照分数降序排列和打印学生姓名。一个班级有“n”个学生。他们有三个不同的主题:数据结构、算法设计和分析以及操作系统。所有学生的每个科目的分数都提供给您。你必须告诉每个学生在课堂上的位置。根据他们在课堂上的位置打印每个学生的姓名。平局根据他们的卷数打破。在两个分数相同的学生之间,卷数较少的学生将获得较高的排名。输入按卷号顺序提供。 我能够实现代码,其中我创建了一个配对类以根据它们的标记进行排序并将所有对象存储在数组中。之后,我使用 Array.sort 对数组进行排序。 那么 Arrays.sort(pair) 是如何根据什么对数组进行排序的呢。

import java.util.*;

public class Main{
    static class pair implements Comparable<pair>{
        int marks;
        String name;
        public pair(int m, String n){
            this.marks = m;
            this.name = n;
        }
        @Override
        public int compareTo(pair p){
            return p.marks - this.marks;
        }
    }
    public static void main(String args[]){
        Scanner in = new Scanner(System.in);
        // String sn = in.nextLine();
        int n = in.nextInt();
        pair[] arr= new pair[n];
        for(int i =0;i< n;i++){
            String name = in.next();
            int sum = 0;
            for(int j = 0;j<3;j++){
                int num = in.nextInt();
                sum += num;
            }
            int marks = sum ;
            arr[i]= new pair(marks,name);
        }
        Arrays.sort(arr);
        for(int i = 0;i<arr.length;i++){
            System.out.println(i+1 +" "+arr[i].name);
        }
    }
}

【问题讨论】:

  • 你需要发布一些代码让其他人帮助你。你可以看到这个问一个好问题How do I ask a good question?
  • 我无法将代码放在这里,因为格式存在一些问题,并且 stackoverflow 不允许我这样做。
  • 您只需发布代码,我可以帮助您重新格式化代码。
  • 您好,我包含了代码。

标签: java arrays sorting comparable


【解决方案1】:

在下面的代码中,比较器根据标记进行比较。 Array.sort 使用自定义的比较器。

package stackoverflow;

import java.util.Arrays;
import java.util.Comparator;

class Student {
    int rollno, marks;
    String name;

    public Student(int rollno, int marks, String name) {
        this.rollno = rollno;
        this.name = name;
        this.marks = marks;
    }

    public String toString() {
        return this.rollno + " " + this.name + " " + this.marks;
    }
}

class Sortbymarks implements Comparator<Student> {
    public int compare(Student a, Student b) {
        return b.marks - a.marks;
    }
}

public class ArraySort {

    public static void main(String[] args) {
        Student[] arr = { new Student(111, 150, "abc"), new Student(131, 100, "abcd"), new Student(121, 120, "xyz"),
                new Student(191, 150, "txy") };

        System.out.println("Unsorted");
        for (int i = 0; i < arr.length; i++)
            System.out.println(arr[i]);

        Arrays.sort(arr, new Sortbymarks());

        System.out.println("Sorted by marks");
        for (int i = 0; i < arr.length; i++)
            System.out.println(arr[i]);
    }
}

【讨论】:

  • 嗨,我认为解决方案很好,但我们不会输入卷号。卷号将根据输入中的内容确定。这是我的代码。我能够编写代码,但我想问的是,如果我们已经使用比较器对所有对象进行了排序,那么 Arrays.sort() 如何组织数组中的整个对象。希望我可以在这里输入我的代码,但我无法这样做,因为它无法回答那么长的问题
【解决方案2】:
Here is my answer. I want to know how Arrays.sort() sorts the object pair after it has already been sorted according to their marks.
import java.util.*;
public class Main{
    static class pair implements Comparable<pair>{
        int marks;
        String name;
        public pair(int m, String n){
            this.marks = m;
            this.name = n;
        }
        @Override
        public int compareTo(pair p){
            return p.marks - this.marks;
        }
    }
    public static void main(String args[]){
        Scanner in = new Scanner(System.in);
        // String sn = in.nextLine();
        int n = in.nextInt();
        pair[] arr= new pair[n];
        for(int i =0;i< n;i++){
            String name = in.next();
            int sum = 0;
            for(int j = 0;j<3;j++){
                int num = in.nextInt();
                sum += num;
            }
            int marks = sum ;
            arr[i]= new pair(marks,name);
        }
        Arrays.sort(arr);
        for(int i = 0;i<arr.length;i++){
            System.out.println(i+1 +" "+arr[i].name);
        }
    }
}

【讨论】:

    猜你喜欢
    • 2021-03-17
    • 2023-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    相关资源
    最近更新 更多