/**
* 3.对其他类型泛型的List进行排序,以Student为例。
* 其中生成的id为1000以内不重复的整数
*/
public void testStudentSort() {
Random r= new Random();
for(int i=0;i<3;i++ ) {
int id=r.nextInt(1000);
String name =dllx.next();
System.out.println("请输入第"+(i+1)+"个学生的姓名:");
do{
student.add(new Student(id+"",name));
}while (student.contains(id));
}
System.out.println("--------------排序前------------");
for (Student student2 : student) {
System.out.println(student2.getId()+":"+student2.getName());
}
Collections.sort(student);
System.out.println("--------------排序后------------");
for (Student student2 : student) {
System.out.println(student2.getId()+":"+student2.getName());
}
}
正确思路是:do的时候随机一个ID,while的时候判断是否包含这个ID,然后花括号中添加这个ID
这样就形成了一个ID的随机添加,for循环3次。
在一开始如果需要有一个循环有固定的多个结果,优先使用for
for3次循环,用if判断contains,然后添加。
这样思路就不会乱,并且在需要扩展的时候也很方便
当然dowhile更符合你的胃口的话,也挺好
我在实现的时候其实为了让思路更加清晰,使用了三个while进行判断三个随机数互不相等,然后直接使用三个while当中的参数引用到new Student的ID当中去,这样虽然看起来笨重,但是对于原始的代码影响最小,但是也不符合后期的修改和扩容。希望能给你带来灵感
for(int i=0;i<3;i++ ) { System.out.println("请输入第"+(i+1)+"个学生的姓名:"); String name =dllx.next(); do{ int id=r.nextInt(1000); }while (student.contains(id)); student.add(new Student(id+"",name)); }
你的逻辑是当list中存在当前id时,会一直添加这个student
System.out.println("请输入第"+(i+1)+"个学生的姓名:");这句不应该写在前面吗?