我的方法不会让我在通过数组时留下for循环

时间:2011-12-06 20:04:18

标签: java for-loop

我有一种方法可以将新车(本田)添加到vehicles阵列。该阵列最多包含4辆车。

Vehicle[] vehicles = new Vehicle[4];

如果有Vehicle值,则该方法应该在vehicles数组的末尾添加1个新null对象。问题是它正在写入数组中的所有null值,而不是只写入1然后踢出for循环。

这就是我所拥有的(注意 - 我需要使用数组而不是ArrayList):

public void addVehicle(Vehicle Honda[]) throws FileNotFoundException
{
    boolean found = false;
    if(canAddVehicle() == true)
    {
        for(int i = 0; i < vehicles.length || !found; i++)
        {
            if(vehicles[i] == null)
            {
                Scanner reader = new Scanner(file);
                Honda[i] = new Vehicle();
                Honda[i].readRecord(reader);
                vehicles[i] = Honda[i];
                reader.close();
                found = true;
            }

        }
        System.out.println("Vehicle Added!");

    }
}

我已设置found = true以确保它在找到数组中的第一个null值后立即离开for循环..但它似乎不是工作。为什么会这样?

编辑:此外,我不允许拥有任何其他班级数据。

2 个答案:

答案 0 :(得分:7)

当您使用||时,您正在使用&&

for(int i = 0; i < vehicles.length && !found; i++)

有关条件运算符的更多信息,请参见this Java Tutorials article

作为一个友好的批评,这对另一个开发人员来说不太可读。以下更容易理解:

for(int i = 0; i < vehicles.length; i++)
{
    if(vehicles[i] == null)
    {
        Scanner reader = new Scanner(file);
        Honda[i] = new Vehicle();
        Honda[i].readRecord(reader);
        vehicles[i] = Honda[i];
        reader.close();
        break; //break out of the loop
    }
}

答案 1 :(得分:1)

而不是for(int i = 0; i < vehicles.length || !found; i++)使用for(int i = 0; i < vehicles.length && !found; i++)

使用和运算符||替换或运算符&&。基本上它是看到发现是真的,但我仍然不到车辆。所以循环继续。使用&&时,两者都必须为true才能运行。