2014-09-19 49 views
0

我正在修理我的项目,以查找并告诉我哪些学生尝试使用另一个名称进行注册,因此我编写了代码来搜索我的数据列表并找到具有相同ID号的数字如下,但有可能改变或添加东西,所以它不会打印出相同的信息两次
例测试用例我可以阻止我的程序打印重复信息

Student ID 103 is repeating the class as names Mark Wall and Stacy Gwee 
Student ID 103 is repeating the class as names Stacy Gwee and Mark Wall 



for(int n = 0; n<studentList.size(); n++) 
     { 
     for(int m = 0; m<studentList.size(); m++) 
      { 
      if(studentList.get(n).getId().equals(studentList.get(m).getId()) && !studentList.get(n).getName().equals(studentList.get(m).getName())) 
       { 
       System.out.println("Student ID " + studentList.get(n).getId() + " is repeating the class as names " + studentList.get(n).getName() + " and " + studentList.get(m).getName()); 
       } 
      } 
      } 
+0

缩短第二个循环。 – 2014-09-19 20:58:24

回答

2

要做到这一点根本改变循环第二:

for(int m = 0; m < n; m++) 
+0

这个作品完全谢谢你!但是如果你不介意我问,这个工作到底有多重要,因为它们都是0,所以它不应该从0开始运行!<0 – Robert 2014-09-19 21:06:38

+1

第一次迭代基本上会阻止你检查第一个条目,因为ID100约翰肯定会等于ID100约翰。然后,n随之增长,并在之前开始对所有内容进行后续检查。 – Compass 2014-09-19 21:20:11

4

的简单方法:

for(int m = 0 ; m < n ; m++) 

Ø [R

for(int m = n + 1 ; m < studentList.size() ; m++) 
+0

以我个人的口味来说,我更喜欢[这种表示法](http://stackoverflow.com/a/25942284/2055998)。 – 2014-09-19 21:00:10

+0

其实我也是:) – 2014-09-19 21:01:48

1

这是正确的方式做到这一点:

  1. 创建地图
  2. 加入您的与地图匹配
  3. 检查您的列表之前,如果ID已被使用,请检查地图

您需要某种方式来标记您的重复项。您可以创建一个列表或一个数组来标记这些重复项。然后你会检查ID以确保它以前没有被调用过。

+0

我想OP的班级还没有去过地图。 – 2014-09-19 21:01:41

0

如果您将阵列想象成一个网格n个空间宽且m个空间高的网格,则您正在查看每个网格广场。

如果你在网格上画一条对角线,实际上你只需要看那条线以上的那条线。

因此,您的内部循环可以开始,不是在零,而是在n的值。

+0

对角线本身需要排除。所以它是'n + 1'。 – 2014-09-19 21:03:42

相关问题