2013-11-24 94 views
0

如何檢查項目是否已經在列表中並防止添加項目。 這是我到目前爲止有:防止重複打印項目

public static void main(String[] args) 
{ 
    //Before checkout 
    Item list[] = new Item[10]; 
    for(int i = 0; i < list.length; i++) 
    { 
     int random = (int)(Math.random() * 2); 

     if(random == 0) 
      list[i] = new Perish(); 
     else 
      list[i] = new Nonperish(); 
    } 

    for(int i = 0; i < list.length; i++) 
    { 
     for(int j = 1; j < list.length; j++) 
      if(list[i].getName().equals(list[j].getName())) 
      { 
       int newRandom = (int)((Math.random() * 2)); 
         if(newRandom == 0) 
          list[i] = new Perish(); 
         else 
          list[i] = new Nonperish(); 
      } 
    } 
+0

你面臨的問題是什麼? – Adarsh

+0

@Adarsh我必須打印一份購物清單,我不想在收據上打印重複項目。我正在檢查並查看已創建的項目是否與列表中的另一個項目具有相同的名稱。如果它具有相同的名稱,則創建一個新對象以獲取不同的名稱。這需要檢查,看看是否創建的項目也具有相同的名稱,我不知道如何做到這一點。 –

+0

但是你每次只創建一個對象。名稱如何設置?從我所看到的,名字都是一樣的。你能否在Perish和Nonperish中提供代碼? – Adarsh

回答

0

Inspite使用數組嘗試使用HashSet的。要使對象Item在HashSet中工作,您應該重寫hasCode()和equals()方法。我假設getName()返回String,所以這些方法應該是這樣的:

@Override 
public int hashCode() { 
    return getName().hashCode(); 
} 


@Override 
public boolean equals(Object o) { 
    if(o == null){ 
     return false; 
    } 
    if(!o.getClass().equals(getClass())){ 
     return false; 
    } 
    return this.getName().equals(((Item)o).getName()); 
} 

然後嘗試使用此代碼。在最後你的陣列不能有任何重複項目:

Item list[] = new Item[10]; 

Set<Item> itemSet = new HashSet(); 


for(int i = 0; i < list.length; i++) 
{ 

    do{ 
    int random = (int)(Math.random() * 2); 

     if(random == 0) 
      list[i] = new Perish(); 
     else 
      list[i] = new Nonperish(); 

     if(itemSet.contains(list[i])){ 
      continue; 
     }else { 
      itemSet.add(list[i]); 
      break; 
     } 
    }while(true); 

}