import java.util.*;
public class Student {
public String name;
public int score;
public static void main (String[] args) {
System.out.println("*****录入学员信息,当录入学员的姓名分数为0时结束*****");
Scanner input = new Scanner(System.in);
ArrayList<Student> arraylist = new ArrayList<Student>();
//输入学员信息
while(true){
Student student = new Student();
System.out.println("请输入学员姓名:");
student.name = input.next();
arraylist.add(student);
}
System.out.println("请输入学员分数:");
student.score = input.nextInt();
if(student.score==0){
System.out.println("结束录入!");
break;
}
}
//按照成绩排序
//输出学员信息
System.out.println("学员的信息如下:");
System.out.println("姓名\t分数\t");
Iterator<Student> iterator = arraylist.iterator();
while(iterator.hasNext()){
Student a = iterator.next();
System.out.println(a.name+"\t"+a.score+"\t");
}
}
}
为什么你非得用一个ArrayList来存Student呢?(不是不能解决,就是麻烦)
试试下面代码
private static void sortStudents(ArrayList<Student> arraylist) {
// 输出学员信息
System.out.println("学员的信息如下:");
System.out.println("姓名\t分数\t");
arraylist.stream().sorted((stu1, stu2) -> stu1.score - stu2.score)
.forEach(stu -> System.out
.println(stu.name + "\t" + stu.score + "\t"));;
}
可参照,都是类似的,http://blog.csdn.net/superhill/article/details/7837106
Student implements Comparable
{
//在实体类中添加
public int compareTo(Object obj) {// Comparable接口中的方法
Student b = (Student) obj;
return this.score - b.score; // 按score比较大小,用于默认排序
}
}
最后一楼已经接近真正解决方案了,不过我却不建议呢样解决,其实我们集合排序有两个接口,一个是Comparable,一个是Comparator
第一个就是5楼的解决办法,下面我说第二种:
第二种实体类什么都不需要动,只需要在你需要排序的呢个空白部分加上一部分代码,说ArrayList排序麻烦的童鞋注意了,没有比这个更简单的排序了,你说麻烦只是你还不知道原来Java里面有这个东西,
在集合中有一个工具类Collections,这是集合工具类,里面本身就封装了集合排序,我们只需要调用双参的方法
Collections.sort(list,
new Comparator() {
@Override
public int compare(User o1,
User o2) {
return o1.getScore() - o2.getScore();// 升序
//return o2.getScore()-o1.getScore();// 降序
}
});
这个才是正解,Java就是不断扩充眼界的过程,眼界有时候达不到,可能一辈子都不知道某个问题还有某种解决办法,所以一定要不断扩充自己