2013-11-24 69 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); 

}