防止重复的项目被打印

时间:2013-11-24 00:52:11

标签: java object for-loop printing while-loop

如何检查项目是否已列入列表并阻止其添加。 以下是我到目前为止的情况:

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();
            }
    }

1 个答案:

答案 0 :(得分:0)

尽管使用数组尝试使用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);

}