2013-04-04 172 views
-1

方法generateId爲學生分配ID,方法storeStudent由讀取數據的方法readData調用,數據中的StudentId字段全部設置爲未知,所以方法storeStudent替換未知的單詞每個學生的唯一身份證,但與它的問題,如果我有超過10名學生它會再次重複相同的ID,我試圖避免身份證複製,因此我該如何解決這個問題避免重複生成ID

public void storeStudnet(學生) {

 student.setId(generateCustomerId("AB-",1)); 

     for(Student students : studentList) 
     { 
     if(student.getStudentID().equals(student.getStudentID())) 
     { 
      student.setId(generateId("AB-",1)); 
     } 

     } 

} 
    studentList.add(student); 
} 


    public String generateId(int numberaOfDigits) 
{ 
    Random random = new Random(); 
    for(int i=0;i<numberaOfDigits;i++) 
    { 

     random.nextInt(9); 

    } 

    return random.nextInt(9); 
} 
+1

到底什麼......只是找到最高使用的ID並從那裏增加它。 – Havenard 2013-04-04 00:58:49

回答

0

如果您使用的數據庫爲這個和一個ORM成功h作爲Hibernate,你已經有了註解(@Id)來處理這個問題。

如果您想自己創建它,您可能需要使用synchronized方法,該方法會始終處理增加的id。隨機不是一個好的選擇,沒有保證它不會選擇一個已經存在的號碼(檢查Random API)。

0

我認爲最好的解決方案是在評論中不斷增加數字。但是,如果這不符合您的要求,您可以保留生成的ID的單獨列表,並檢查是否已使用list.contains()生成id。樣品可能是這樣的:

ArrayList<int> id = new ArrayList<int>() ; 
Random random = new Random(); 
public int generateId(int numberaOfDigits) 
{ 
    int x = random.netxInt(number); 
    while(id.contains(x)) 
     { 
     x = random.nextInt(number) 
     } 
    return x; 
} 

另外,有一些錯誤在你發佈代碼:

  1. 您返回generateId()將int,但你所定義的返回類型的字符串。
  2. 我不確定你想用generateId()中的for循環做什麼,但它沒有做任何事情接受生成新的隨機數,這個數字甚至不存儲在任何地方。