Java对象数组排序

在对象数组中对指定的成员排序:
假设:

已知:
N个人,接下来N行给出每个人的成绩与姓名
按照成绩升序排序,并且成绩相同的按照出现输入顺序在前的先输出。

样例:

输入:(ps:输入有多组测试用例) 利用sc.hasNext()来读取EOF

7
peter 96
jack 70
Tom 70
smith 67
fang 90
yang 50
ning 70

输出:

1

代码:

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;//否则座位号小的在前
	}
}

猜你喜欢

转载自blog.csdn.net/qq_44009311/article/details/102175274