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