public class Test {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
try {
int countryCounts = scanner.nextInt();
scanner.nextLine();

List<String[]> medalList = new ArrayList<String[]>(countryCounts);
while (countryCounts-- > 0) {
String line = scanner.nextLine();
medalList.add(line.split(" "));
}

Collections.sort(medalList, new Comparator<String[]>() {

@Override
public int compare(String[] m1, String[] m2) {
int cs = 0;
for (int i = 1; i < m1.length; i++) {
cs = cpare(m1[i], m2[i]);
if (cs != 0) {
break;

}

if (cs == 0) {//金银铜牌都相同
return m2[0].compareTo(m1[0]);
}

return cs;
}

private int cpare(String m, String n) {
return Integer.valueOf(n) - Integer.valueOf(m);
}

});

for (String[] ml : medalList) {
System.out.println(ml[0]);
}

} catch (Exception e) {
e.printStackTrace();
} finally {
scanner.close();
}
}
}没注释,将就着看吧

解决方案 »

  1.   

    public static void main(String[] args) {
    //创建控制台输入流
    Scanner in = new Scanner(System.in);
    //获取数量
    int count = in.nextInt();
    //保存数据的集合
    List<String[]> data = new ArrayList<String[]>(count);
    //轮询读取控制台输入的国家信息
    while (in.hasNext()) {
    String str = in.nextLine();
    if (str.trim().length() != 0) {
    data.add(str.split(" "));
    }
    //若输入了指定数量则停止
    if (data.size() == count)
    break;
    }

    //排序
    Collections.sort(data, new Comparator<String[]>() {
    @Override
    public int compare(String[] o1, String[] o2) {
    //先根据金牌排序
    int d = Integer.parseInt(o2[1]) - Integer.parseInt(o1[1]);
    //金牌相等,则根据银牌排序
    if(d == 0){
    d = Integer.parseInt(o2[2]) - Integer.parseInt(o1[2]);
    //银牌相等则根据铜牌排序
    if(d == 0){
    d = Integer.parseInt(o2[3]) - Integer.parseInt(o1[3]);
    //铜牌相等则根据名字排序
    if(d == 0){
    Collator cmp = Collator.getInstance(java.util.Locale.US);
    d = cmp.compare(o1[0], o2[0]);
    }
    }
    }
    return d;
    }
    });

    for (String[] arr : data) {
    System.out.println(arr[0] + " " + arr[1] + " " + arr[2] + " " + arr[3]);
    }

    in.close();
    }