在对象数组中对指定的成员排序:
假设:
已知:
N个人,接下来N行给出每个人的成绩与姓名
按照成绩升序排序,并且成绩相同的按照出现输入顺序在前的先输出。
样例:
输入:(ps:输入有多组测试用例) 利用sc.hasNext()来读取EOF
7
peter 96
jack 70
Tom 70
smith 67
fang 90
yang 50
ning 70
输出:
代码:
package bao;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
/**
* 成绩排序
*
* @author 轩xuan
*
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
try {
//判断是否还有输入,EOF结束
while (sc.hasNext()) {
int n = sc.nextInt();
A[] a = new A[n + 2];
//遍历对象数组
for (int i = 1; i <= n; i++) {
a[i] = new A(i, sc.next(), sc.nextInt());
}
//排序
Arrays.sort(a, 1, n + 1, new MyComprator1());
//打印
System.out.println("------------------------------------------------|");
System.out.println("排名\t姓名\t\t成绩\t\t座位号\t|");
for (int i = 1; i <= n; i++) {
System.out.println(i + ":\t" + a[i].name + "\t\t" + a[i].sorce + "\t\t" + a[i].i+"\t|");
System.out.println("------------------------------------------------|");
}
}
} finally {
sc.close();
}
}
}
//对象A
class A {
int i;// 座位号
String name;// 姓名
int sorce;// 成绩
//构造方法
public A(int _i, String _name, int _sorce) {
this.i = _i;
this.name = _name;
this.sorce = _sorce;
}
}
//设定A的排序规则
class MyComprator1 implements Comparator<A> {
public int compare(A arg0, A arg1) {
if (arg0.sorce != arg1.sorce) {//如果成绩不同就按成绩大的在前
return arg0.sorce > arg1.sorce ? -1 : 1;// x小到大
}
return arg0.i < arg1.i ? -1 : 1;//否则座位号小的在前
}
}