为了账号安全,请及时绑定邮箱和手机立即绑定

新手请问这个程序哪里出错,跪求大神解答!!!!!

/**

* 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());

}

}


正在回答

3 回答


正确思路是:do的时候随机一个ID,while的时候判断是否包含这个ID,然后花括号中添加这个ID

这样就形成了一个ID的随机添加,for循环3次。


在一开始如果需要有一个循环有固定的多个结果,优先使用for

for3次循环,用if判断contains,然后添加。

这样思路就不会乱,并且在需要扩展的时候也很方便

当然dowhile更符合你的胃口的话,也挺好

我在实现的时候其实为了让思路更加清晰,使用了三个while进行判断三个随机数互不相等,然后直接使用三个while当中的参数引用到new Student的ID当中去,这样虽然看起来笨重,但是对于原始的代码影响最小,但是也不符合后期的修改和扩容。希望能给你带来灵感

0 回复 有任何疑惑可以回复我~
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

0 回复 有任何疑惑可以回复我~

System.out.println("请输入第"+(i+1)+"个学生的姓名:");这句不应该写在前面吗?

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第三季
  • 参与学习       409792    人
  • 解答问题       4340    个

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

进入课程

新手请问这个程序哪里出错,跪求大神解答!!!!!

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信