Polymorphie Iteratoren statt Collections

javapklein

Mitglied
Hallo,

ich bin Javabeginner und mir wurde folgende Aufgabe gestellt (Main Methode ist vorgegeben).
Es sollen Klassen Person und PersonenList gebildet werden. Die Klasse PersonenList darf nicht von einer Collection erben und dort sollen 10 Objekte vom Typ "Person" gespeichert werden. Aus meiner Sicht bleibt daher nur noch Interface und Iteratoren. Ich komme aber bisher noch zu keiner Lösung. Es wäre schön, wenn mir jemand erklären kann, was ich in den Klassen Person und PersonenList definieren muss. Hier die main-Methode und meine beiden Klassen.

Java:
public class TestPersonenList {
	
	public static void main(String[] args) {
	
		PersonenList list = new PersonenList();
		list.add(new Person("Peter", "Braun"));
		list.add(new Person("Michael", "Roth"));
						
		for(Person p : list) {
			System.out.println(p);
		}
	}
}

Java:
public class Person {
	
	public String vorname;
	public String nachname;
	
	public Person(){
	}
	
	public Person(String vorname, String nachname){
		this.vorname = vorname;
		this.nachname = nachname;		
	}

	public String getVorname() {
		return vorname;
	}

	public void setVorname(String vorname) {
		this.vorname = vorname;
	}

	public String getNachname() {
		return nachname;
	}

	public void setNachname(String nachname) {
		this.nachname = nachname;
	}	
}

Java:
import java.util.Iterator;

public class PersonenList extends Person  {
	
	String[] listen = new String[10];
	
	public PersonenList(){
	}	
	
	public PersonenList(String vorname, String nachname){
		super(vorname, nachname);		
	}

	public void add (Person person){
		listen.add(person);
	}
}
 
G

Gast2

Gast
Muss PersonenList denn iterierbar sein? Wenn ja, dann musst du Iterable implementieren.

Warum leitet PersonenList von Person ab? Das macht imho keinen Sinn.
 

javapklein

Mitglied
Ich habe PersonenList abgeleitet, damit ich die Attribute vorname und nachname erbe oder ist das falsch.
PersonenList sollte iterierbar sein? Mein Problem liegt ja darin Iterabel zu imlementieren. Wie mache ich das?
 

Fu3L

Top Contributor
Ich habe PersonenList abgeleitet, damit ich die Attribute vorname und nachname erbe oder ist das falsch.

Ein gutes Beispiel wo Vererbung falsch verwendet wird. Du musst dir bei Vererbung die Frage stellen: "Ist eine PersonenListe eine Person?" Offensichtlich nein.

Die Liste muss Personen enthalten (genannt Komposition).

Also wäre eine Möglichkeit ein Array der Länge 10 vom Typ Person zu erstellen. Iterable zu implementieren habe ich aber auch noch nicht gemacht^^ (Das was pro2 schreibt, ist ja nur der erste Schritt^^ Du musst dann noch den Iterator selbst schreiben)
Edit: Dürfte auch nicht zu schwer sein... Aber man will ja nicht alles vorkauen ;)
 
G

guest726

Gast
Ich habe PersonenList abgeleitet, damit ich die Attribute vorname und nachname erbe oder ist das falsch.
So ziemlich alles. Was ist denn deiner Meinung nach der Vorname einer Liste von Personen? Diese Vererbung ergibt schlicht und einfach überhaupt keinen Sinn. Genausowenig wie ein Autohaus ein Auto ist ist z.B. ein Aktenschrank mit den Personalakten eine Person.
 
G

Gast2

Gast
So könnte deine Klasse aussehen:
Java:
import java.util.Iterator;

public class PersonenList implements Iterable<Person> {
    
    Person[] personen = new Person[10];
    
    public PersonenList(){
    }  
    
    public void add(Person p) {
    	// TODO: implement
    }
    
    @Override
    public Iterator iterator() {
    	return new PersonenIterator();
    }
    
    private class PersonenIterator implements Iterator<Person> {
    	private final int current = 0;
    	
		@Override
		public boolean hasNext() {
			// TODO: implement
			return false;
		}

		@Override
		public Person next() {
			// TODO: implement
			return null;
		}

		@Override
		public void remove() {
			throw new UnsupportedOperationException("method not implemented");
		}
    	
    }
}
Die Methoden musst du dann noch entsprechend implementieren.

EDIT:
Die Klasse PersonenList sollte natürlich ein Person und kein String Array haben.
 
Zuletzt bearbeitet von einem Moderator:

Andreas29

Bekanntes Mitglied
Hi,

das kann man alles viel einfacher haben. Das Stichwort, welches hier angebracht ist, heißt Delegate. Sprich, in der Klasse PersonenList hälst du dir eine Liste mit Personen-Objekten als Member. Weiterhin implementiert diese Klasse das Interface Iterable. Alle Methoden, die das Interface vorschreibt, werden direkt an die Membervariable weitergereicht oder anders ausgedrückt delegiert (daher der Name Delegate). Danach bist du fertig. Dann sparst du dir den Person-Iterator komplett.

Ohne den Code in einer IDE ausprobiert zu haben, müsste das ganze meiner Meinung nach ungefähr so aussehen:
Java:
public class PersonenList implements Iterable<Person> {
    
    List<Person> personen = new ArrayList<>();
    
    public void add(Person p) {
        personen.add(p);
    }
    
    @Override
    public Iterator iterator() {
        return personen.iterator();
    }
}

Mehr braucht man für diesen Fall nicht. Höchstens in der add Methode noch eine Abfrage, dass nicht mehr als 10 Personen gespeichert werden können. Du sprachst im ersten Posting von "da sollen 10 Personen gespeichert werden". Wenn dies eine Obergrenze sein soll, müsste dies in der add-Methode Berücksichtigung finden.

In der Hoffnung geholfen zu haben,
Andreas
 

javapklein

Mitglied
Vielen Dank für die Lösung Andreas, wäre auch vom Code her sehr einfach.
Leider meckert der Compiler über den Befehl mit der Meldung
The type List is not generic; it cannot be parameterized with arguments
<Person>
import java.awt.List ist eingebaut
Code:
List<Person> personen = new ArrayList<>();
 
G

Gast2

Gast
Das ist der falsche Import. Du brauchst
Code:
java.util.List
.
 

javapklein

Mitglied
Mußte den Befehl noch anpassen wegen jdk 1.6.
Der Befehl sieht jetzt so aus.
Code:
List<Person> personen = new ArrayList<Person>();

Ich dachte die Ausgabe würde mir die beiden Personen in Form Vorname und Nachnamen ausgeben.
Als Ausgabe erhalte ich jedoch leider nur:
Person@45bab50a

Wie bekomme ich die Ausgabe von Vorname und Nachname?
 

javapklein

Mitglied
Ich bin erst wenige Tage im Javageschäft und daher fallen einem so einfache Sachen wie toString nicht immer ein. Man hat dann einfach ein Brett vor dem Kopf. Vielen Dank für die Vorschläge und Anregungen im Moment denke ich einfach noch zu kompliziert und man sieht den Wald vor lauter Bäumen nicht.
:bahnhof: :toll:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Frage zu Iteratoren Java Basics - Anfänger-Themen 2
walker23m C++ Listen iteratoren in Java umwandeln Java Basics - Anfänger-Themen 3
H Iteratoren funktionieren nicht Java Basics - Anfänger-Themen 4
0x7F800000 fail-fast Iteratoren nerven gewaltig Java Basics - Anfänger-Themen 18
B Datenstrukturen & Algorithmen => Iteratoren Java Basics - Anfänger-Themen 7
F Was sind Iteratoren ? Java Basics - Anfänger-Themen 9
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
H SimpleDataFormat.format() spuckt falsches Jahr aus (statt 1999 = 3899) Java Basics - Anfänger-Themen 7
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
L Breadth-First Search statt einem Pfad, alle Pfade herausfinden Java Basics - Anfänger-Themen 4
S Methode von vererbter Klasse, statt die der "Mutterklasse" aufrufen Java Basics - Anfänger-Themen 28
A Eclipse-Fenster starten statt Konsoleausgabe Java Basics - Anfänger-Themen 2
M Threads Threads laufen sequenziell, statt gleichzeitig. Java Basics - Anfänger-Themen 9
T Datentypen char als Buchstaben statt als Zahl ausgeben Java Basics - Anfänger-Themen 4
P Datentypen Kann ich bei double Komma statt Punkt eingeben? Java Basics - Anfänger-Themen 14
L Dialogbox statt Konsole verwenden Java Basics - Anfänger-Themen 5
R ArrayList - System.out.println nur einmal, statt 10 mal Java Basics - Anfänger-Themen 5
Z Lottoprogramm - Zeigt manchmal nur 5 Zahlen statt 6 an? Java Basics - Anfänger-Themen 4
Y Warum void statt Datentyp + return Java Basics - Anfänger-Themen 4
D Methode die statt char[] ein "null" zurück gibt Java Basics - Anfänger-Themen 8
B GridBagLayout in der oberen rechten Ecke starten statt mittig Java Basics - Anfänger-Themen 2
M toString gibt "null" statt "0.0" aus Java Basics - Anfänger-Themen 5
S Threads Programm terminiert statt zu warten Java Basics - Anfänger-Themen 20
J Objectreferenz statt value an Methode uebergeben? Java Basics - Anfänger-Themen 2
H inputfeld dezimalzahl mit komme statt punkt Java Basics - Anfänger-Themen 12
R Double: auf einmal Komma statt Punkt Java Basics - Anfänger-Themen 4
H TreeMap<> statt TreeMap<Long, String> Java Basics - Anfänger-Themen 2
C lokale Variable verwenden statt globale Java Basics - Anfänger-Themen 7
R POI HSSF liesst in Excel Formel statt Ergebnis Java Basics - Anfänger-Themen 4
K Compiler-Fehler Probleme mit UTF-8 (statt ANSI) und Notepad++ Java Basics - Anfänger-Themen 2
C Objektreferenz holen statt übergeben Java Basics - Anfänger-Themen 2
T Ausgabe findet nicht statt Java Basics - Anfänger-Themen 4
R Objektname statt Adresse ausgeben Java Basics - Anfänger-Themen 4
S Datentypen float statt void Java Basics - Anfänger-Themen 3
S Decimalpunkt statt Dezimalkomma Java Basics - Anfänger-Themen 2
T Array statt String Java Basics - Anfänger-Themen 12
Guybrush Threepwood array.length statt array.length() Java Basics - Anfänger-Themen 6
G Bild in Buffer statt temporäre Bilddatei Java Basics - Anfänger-Themen 6
A log4j - wie kann ich im Quellcode initialisieren statt in der properties-Datei? Java Basics - Anfänger-Themen 2
Landei Annotations statt Listeners? Java Basics - Anfänger-Themen 36
K Txt statt in TextArea in JTable einlesen und bearbeiten können Java Basics - Anfänger-Themen 4
J statt modulo "if-Anweisung" Java Basics - Anfänger-Themen 9
N paint methode statt Event-Handling-Methode Java Basics - Anfänger-Themen 3
D JSP include wie bei php? (inhalt statt ergebnis einfügen)) Java Basics - Anfänger-Themen 24
L Ausgabe in arabischen Zahlen statt in ASCII Java Basics - Anfänger-Themen 9
G Griechische statt lateinischen Buchstaben beim Schreiben Java Basics - Anfänger-Themen 9
M Beispiel-Webprojekt: Statt HSQLDB Postgres verwenden Java Basics - Anfänger-Themen 12
S kompletten Datensatz statt nur ein Feld auslesen lassen,wie? Java Basics - Anfänger-Themen 3
M was wenn der benutzer ein double statt int eingibt ? Java Basics - Anfänger-Themen 3
N Vergleich findet nicht statt. Java Basics - Anfänger-Themen 13
G JDialog auf Jpanel statt Frame? Java Basics - Anfänger-Themen 4
T Wie Eingabe von Gleitkommazahl mit Komma statt Punkt Java Basics - Anfänger-Themen 4
F Sanduhr statt Mauszeiger anzeigen Java Basics - Anfänger-Themen 3
A .statt,anzeigen beim NumberFormat + Wie JTable formatieren? Java Basics - Anfänger-Themen 4
G Toolbar buttons sollen dialoge anzeigne statt pop up Java Basics - Anfänger-Themen 44
R Nur Double statt Sting oder Integer Combo sortieren und ! Java Basics - Anfänger-Themen 16
D ausgabe verändern (statt zeilenumbruch leerzeichen) Java Basics - Anfänger-Themen 2
M statt drop down menü - buttons Java Basics - Anfänger-Themen 5
O JToolBar wird Tab in JTabbedPane statt Toolbar in JFrame Java Basics - Anfänger-Themen 6
W Punkt statt Komma? Java Basics - Anfänger-Themen 2
M Zeichen aneinander Reihen, statt diese zu ersetzen! Java Basics - Anfänger-Themen 3
Dilandau html applet: .jar laden statt .class Java Basics - Anfänger-Themen 4
V Betätigung des Buttons Erhöhung der Variablen um 2 statt 1 Java Basics - Anfänger-Themen 5
U Sortierung in collections testen Java Basics - Anfänger-Themen 11
X Collections.sort als Lambda Java Basics - Anfänger-Themen 14
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
O Collections.sort und List.sort mit Lambda Verwirrung Java Basics - Anfänger-Themen 5
B Collections.sort mit zwei Bedingungen? Java Basics - Anfänger-Themen 4
I Collections.shuffle funktioniert nicht Java Basics - Anfänger-Themen 1
M Collections Frage Java Basics - Anfänger-Themen 1
D Methoden Collections.shuffle mit bestimmtem Startwert? Java Basics - Anfänger-Themen 8
T Java Collections Java Basics - Anfänger-Themen 58
X Collections Collections Maps Frage Java Basics - Anfänger-Themen 4
C Collections: private Map Java Basics - Anfänger-Themen 4
V Collections Java Basics - Anfänger-Themen 3
A Collections Java Basics - Anfänger-Themen 2
P collections.sort Java Basics - Anfänger-Themen 2
R Iterationsreihenfolge über Collections Java Basics - Anfänger-Themen 4
S Klassen Collections Java Basics - Anfänger-Themen 10
H Etwas wie sort() / sorted() in JAVA-Collections? Java Basics - Anfänger-Themen 5
F Collections ArrayList oder Hashmap mittel Collections.sychronised Java Basics - Anfänger-Themen 6
S Bestimmte Objekte aus Collections anwählen/herausbekommen Java Basics - Anfänger-Themen 8
M Collections mit >2 type Parametern? Java Basics - Anfänger-Themen 8
S Frage zu Collections.frequency() Java Basics - Anfänger-Themen 3
T Collections Übersicht Collections Java Basics - Anfänger-Themen 4
X Collections Inhalt von zwei Collections prüfen Java Basics - Anfänger-Themen 4
A Generische Collections und Vererbung Java Basics - Anfänger-Themen 2
K Telefonbuch Implementation mit Java Collections Java Basics - Anfänger-Themen 4
G Collections.binarySearch(LinkedList): cannot find method Java Basics - Anfänger-Themen 6
S Collections Sortieren von 3 Collections nach "einer Sortierung" Java Basics - Anfänger-Themen 3
T Kleine Frage zu Collections Java Basics - Anfänger-Themen 3
A Collections und ArrayList Java Basics - Anfänger-Themen 2
S Klasse Mit Collections Java Basics - Anfänger-Themen 32
X DB4O Collections and Arrays, brauche dringend Hilfe! Java Basics - Anfänger-Themen 3
D Datentypen Generische Collections und Warnings Java Basics - Anfänger-Themen 8
K Aufgabe Collections Java Basics - Anfänger-Themen 2
D Collections - subList erstellen Java Basics - Anfänger-Themen 4
S Frage zu Enumerator der trad.Collections Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben