Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中完成可比较的接口后,Arrays.sort如何工作_Java_Arrays_Sorting_Comparable - Fatal编程技术网

在java中完成可比较的接口后,Arrays.sort如何工作

在java中完成可比较的接口后,Arrays.sort如何工作,java,arrays,sorting,comparable,Java,Arrays,Sorting,Comparable,代码是根据学生的分数按降序排列和打印学生姓名。在一个班里有n个学生。它们有三个不同的主题:数据结构、算法设计与分析和操作系统。所有学生的每个科目的分数都会提供给你。你必须说出每个学生在班上的位置。根据每个学生在课堂上的位置打印他们的名字。平局是根据他们的卷号来打破的。在两个成绩相同的学生中,卷数较少的学生排名较高。输入按卷号的顺序提供。 我能够实现代码,其中我创建了一个pair类,根据它们的标记进行排序,并将所有对象存储在数组中。之后,我使用Array.sort对数组进行排序。 那么Arrays

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

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);
        }
    }
}

在下面的代码中,比较器正在基于标记进行比较。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]);
    }
}

你需要为其他人发布一些代码来帮助你。你可以在这里看到这个,问一个好问题。我无法将代码放在这里,因为格式有问题,stackoverflow不允许我这样做。你只需发布代码,我可以帮你重新格式化代码。嗨,我包括了代码。嗨,我认为解决方案很好,但我们不会输入卷号。卷号将根据输入中的卷号决定。这是我的密码。我能够编写代码,但我想问的是array.sort如何组织数组中的整个对象,如果我们已经使用comparator对所有对象进行了排序。我希望我能在这里输入我的代码,但我不能这样做,因为它不能接受这么长的答案
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);
        }
    }
}