题目我就不发了,关键一直在纠缠我的问题是Java如何通过对象的参数来排序,看了好多帖子今天终于学会两种。
例:分别输入三名学生的语文、数学、英语成绩,要求按照学生的语文进行排名。
第一种方法
首先,我们先创建一个类(必须继承Comparable接口并实现compareTo方法)
class Student implements Comparable<Student>{ int id; int ch,math,eng; int sum; public Student(){ this.id = 0; this.ch = 0; this.math = 0; this.eng = 0; this.sum=0; } public Student(int id, int ch, int math, int eng) { this.id = id; this.ch = ch; this.math = math; this.eng = eng; this.sum=ch+math+eng; } /** 这里省去get和set代码 **/ @Override public String toString() { return "Student{" + "id=" + id + ", ch=" + ch + ", math=" + math + ", eng=" + eng + ", sum=" + sum + '}'; } //升序排列 @Override public int compareTo(Student o) { return this.ch-o.ch; } }
第二种方法
第一种方法不够灵活,因为它只能根据对象的语文成绩进行排序。而第二种方法不需要类继承Comparable接口,直接在Java的Arrays的sort方法中new一个Compartor对象并实现。
如果不是用的数组来存放对象,而是集合,可以使用集合中的排序方法Collections.sort()方法,参数和上面一样。
import java.util.Arrays; import java.util.Comparator; import java.util.Scanner; public class Scholarship { static int n; static Student[] students; public static void main(String[] args) { Scanner input=new Scanner(System.in); //参赛人数 n=input.nextInt(); students=new Student[n]; for (int i = 0; i < n; i++) { students[i]=new Student(); students[i].id=i; students[i].ch=input.nextInt(); students[i].math=input.nextInt(); students[i].eng=input.nextInt(); students[i].sum=students[i].getSum(); System.out.println("学生"+i+"的信息为 "+students[i].toString()); } //升序排序 Arrays.sort(students, new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { return o1.ch-o2.ch; } }); System.out.println("根据语文排序后的学生排名:"); for (int i = 0; i < students.length; i++) { System.out.println(students[i].toString()); } } } class Student{ int id; int ch,math,eng; int sum; public Student(){ this.id = 0; this.ch = 0; this.math = 0; this.eng = 0; this.sum=0; } public Student(int id, int ch, int math, int eng) { this.id = id; this.ch = ch; this.math = math; this.eng = eng; this.sum=ch+math+eng; } @Override public String toString() { return "Student{" + "id=" + id + ", ch=" + ch + ", math=" + math + ", eng=" + eng + ", sum=" + sum + '}'; } }
运行结果