2 Pluspunkte 0 Minuspunkte

Ich habe eine Klasse

public class Person {

    String name;
    int alter;
    String adresse;

    public Person(String name, int alter, String adresse) {
        this.name = name;
        this.alter = alter;
        this.adresse = adresse;
    }

    public void printDetails() {
        System.out.println("Name: " + name);
        System.out.println("Alter: " + alter);
        System.out.println("Adresse: " + adresse);
    }

    public String getName() {
        return name;
    }

    public void setName(String newName) {
        this.name = newName;
    }
    
}

Wie kann ich einen Iterator dafür erstellen?

import java.util.Iterator;

public class Main {
    
    public static void main(String[] args) {
    
        Person[] peopleArray = {
            new Person("Max Mustermann", 30, "Musterstraße 123"),
            new Person("Erika Musterfrau", 25, "Musterweg 456"),
        };

        Iterator<Person> personIterator = peopleArray.iterator();

        while (personIterator.hasNext()) {
            Person person = personIterator.next();
            person.printDetails();
        }
        
    }
    
}

Wenn ich das versuche bekomme ich diese Fehlermeldung.

Main.java:12: error: cannot find symbol
        Iterator<Person> personIterator = peopleArray.iterator();
                                                     ^
  symbol:   method iterator()
  location: variable peopleArray of type Person[]
1 error
von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Für eine selbst definierte Klasse musst du den Iterator selbst schreiben.

import java.util.Iterator;
import java.util.NoSuchElementException;

public class PersonIterator implements Iterator<Person> {

    private final Person[] people;
    private int currentIndex = 0;

    public PersonIterator(Person[] people) {
        this.people = people;
    }

    @Override
    public boolean hasNext() {
        return currentIndex < people.length && people[currentIndex] != null;
    }

    @Override
    public Person next() {
        if (!hasNext()) {
            throw new NoSuchElementException();
        }
        return people[currentIndex++];
    }
    
}

Damit kannst du wie gewohnt über die Objekte iterieren.

public class Main {
    public static void main(String[] args) {
        Person[] peopleArray = {
            new Person("Max Mustermann", 30, "Musterstraße 123"),
            new Person("Erika Musterfrau", 25, "Musterweg 456"),
        };

        PersonIterator personIterator = new PersonIterator(peopleArray);

        while (personIterator.hasNext()) {
            Person person = personIterator.next();
            person.printDetails();
        }
    }
}

von (776 Punkte)