华为oj之成绩排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mushao999/article/details/45462059
成绩排序      
描述:
查找和排序
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
      都按先录入排列在前的规则处理。
   例示:
   jack 70
   peter 96
   Tom 70
   smith 67
   从高到低  成绩            
   peter     96    
   jack      70    
   Tom       70    
   smith     67    
   从低到高
   smith 67
   jack 70
   Tom 70
   peter 96    
 
知识点: 排序 
题目来源: 内部整理 
练习阶段: 中级 
运行时间限制: 10Sec
内存限制: 128MByte
输入:  
输入多行,先输入要排序的人的个数,然后分别输入他们的名字和成绩,以一个空格隔开
用户名字,字符串,非空串,长度不超过20;
成绩,整数,范围【0,100】
输入排序方式,0或1,0表示成绩从高到低方式输出名字和成绩,1表示成绩从低到高方式输出名字和成绩


 
 
输出:  
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开
 
样例输入:
3
0
fang 90
yang 50
ning 70
                   
样例输出:
fang 90
ning 70
yang 50
                    

答案提示:

原来自己写的是

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int num=Integer.parseInt(sc.nextLine());
		String type=sc.nextLine();
		Score[] scores=new Score[num];
		for(int i=0;i<num;i++)
		{
			String[] tmp=sc.nextLine().split(" ");					
			scores[i]=new Score(tmp[0],Integer.parseInt(tmp[1]));
		}
		Arrays.sort(scores,new Comparator<Score>() {
			@Override
			public int compare(Score s1,Score s2)
			{
				if(s1.score!=s2.score)
				{
					if(type.equals("0"))
					{
					return -((Integer)s1.score).compareTo(s2.score);
					}
					else {
					return ((Integer)s1.score).compareTo(s2.score);
					}
				}
				else {
					return ((Integer)s1.sid).compareTo(s2.sid);
				}
			}
		});
		for(Score s:scores)
		{
			System.out.println(s);
		}
		sc.close();
	}
}

class Score
{
	public static int id=0;
	int sid;
	String name;
	int score;
	public Score(String name,int score)
	{
		this.sid=id++;
		this.name=name;
		this.score=score;
	}
	@Override
	public String toString()
	{
		return name+" "+score;
	}
}
竟然编译错误,说是内部类中不能访问非final变量,所以把type的定义改为final Sring type=sc.nextLine(); 问题解决。
 

猜你喜欢

转载自blog.csdn.net/mushao999/article/details/45462059