2014-09-19 67 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

相關問題