ArrayChecker失败了吗?

时间:2017-01-11 22:39:01

标签: java arraylist duplicates

我遇到以下代码的问题:

Import java.util.ArrayList;
public class Car {

private String car;
private Car genCar = new Car();
ArrayList<String> allCars = new ArrayList<>(); 

public void setCar() {
    genCar.setModel();
    genCar.setCreator();
    car = genCar.getModel() + "made by" + genCar.getCreator();
}

public void checkDouble() {

    for (String search : allCars) {
        while (search.equals(car)) {
            setCar();
        }
    }
    allCars.add(car);
}

public void repeater(){
    for(int i = 0; i<52; i++){
        setCar();
        checkDouble();
    }
  }
}

每当我尝试检查重复项(此代码执行此操作)时,我的程序仍会将副本放入数组中,当我实际上尝试以这种方式避免它时。

任何解决方案都有效吗?

2 个答案:

答案 0 :(得分:0)

我不确定您要尝试做什么,但在checkDouble中,您找到了重复项,然后将其添加到列表中。

如果我理解正确,你就不需要循环,你需要做的只是使用ArrayList.contains()

if(allCars.contains(someString)) 
{
     System.err.println("Duplicate...");
} else 
{    
     //setCar, addCar, etc.    
}

答案 1 :(得分:0)

你这样做:

public void checkDouble() 
{
    for (String search : allCars) 
    {
        while (search.equals(car)) 
        {
            setCar();
        }
    }
    allCars.add(car);
}

问题在于,一旦找到双倍,您就可以使用setCar() 生成新车,但不会再搜索整个列表

做类似的事情:

public void avoidDoubles()
{
    while allCars.contains(car)
    {
        setCar(); // generate new, different car
    }
    allCars.add(car);
}

FWIW,您可能想要更改某些功能的名称。我会打电话给setCar() generateNewCar()newCar()