Мой метод не позволит мне выйти из цикла for при прохождении массива - PullRequest
2 голосов
/ 07 декабря 2011

У меня есть метод, который добавляет новое транспортное средство (Honda) в массив vehicles. Массив содержит максимум 4 транспортных средства.

Vehicle[] vehicles = new Vehicle[4];

Метод должен добавить 1 новый объект Vehicle в конец массива vehicles, если есть значение 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, чтобы убедиться, что он покидает цикл for, как только находит первое значение null в массиве ... но, похоже, он не работает. С чего бы это?

РЕДАКТИРОВАТЬ: Кроме того, мне не разрешено иметь какие-либо другие данные уровня класса.

Ответы [ 2 ]

7 голосов
/ 07 декабря 2011

Вы используете ||, когда должны использовать &&:

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

Более подробную информацию об условных операторах можно найти в этой статье Java Tutorials .

В качестве дружеской критики, это не очень читаемо для другого разработчика.Следовать будет легче:

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 голос
/ 07 декабря 2011

Вместо for(int i = 0; i < vehicles.length || !found; i++) используйте for(int i = 0; i < vehicles.length && !found; i++)

Замените оператор или || на оператор и &&. В основном это было замечено, что найденное было правдой, но я был все еще меньше чем средства. С && оба должны быть истинными, чтобы он работал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...