Met mijn methode laat ik geen for-lus achter terwijl ik door een array ga

Ik heb een methode waarmee een nieuw voertuig (Honda) wordt toegevoegd aan de array vehicles . De array bevat maximaal 4 voertuigen.

Vehicle[] vehicles = new Vehicle[4];

De methode is bedoeld om 1 nieuw Vehicle -object toe te voegen aan het einde van de array vehicles als er een null -waarde is. Het probleem is dat het schrijft naar ALLE van de null waarden in de array in plaats van alleen naar 1 te schrijven en vervolgens uit de voor lus te schoppen.

Dit is wat ik heb (NB - ik ben verplicht een array te gebruiken in plaats van 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!");

    }
}

Ik heb gevonden = true ingesteld om ervoor te zorgen dat het de for-lus verlaat zodra het de eerste null waarde in de array vindt .. maar het lijkt niet aan het werk zijn. Waarom zou dit zijn?

EDIT: Also, I am not allowed to have any other class level data.

2
Waarom geen pauze gebruiken?
toegevoegd de auteur chance, de bron

2 antwoord

You're using || when you should be using &&:

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

Meer informatie over de conditionele operatoren is te vinden in dit artikel in Java Tutorials .

Als een vriendelijke kritiek is dit niet erg leesbaar voor een andere ontwikkelaar. Het volgende zou gemakkelijker te volgen zijn:

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
    }
}
7
toegevoegd
Bedankt, ik wist niet dat je een pauze kon gebruiken in een For-lus
toegevoegd de auteur MJ93, de bron

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

Replace the or operator || with the and operator &&. Basically it was seeing that found was true, but i was still less than vehicles.length so the loop continued. With && both need to be true in order for it to run.

1
toegevoegd