我遇到以下代码的问题:
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();
}
}
}
每当我尝试检查重复项(此代码执行此操作)时,我的程序仍会将副本放入数组中,当我实际上尝试以这种方式避免它时。
任何解决方案都有效吗?
答案 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()
。