Generic und Listen

GroovyChuc

Mitglied
Hey hab folgendes Problem:

Für den untenstehenden Code hab ich mir eine Testklasse geschrieben, und leider kommt bei der Methode getStudentsInStudgang nie etwas auf der Konsole und die Klasse getStudent liefert immer null zurück. Ich vermute, dass es an der contains-Methode liegt, da in der if-Abfrage wahrscheinlich immer false rauskommt. Ist das so, und wie kann ich es besser machen?
Java:
package verwaltung;

import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class StudentVerwaltung implements IStudentVerwaltung {

	List<IStudent> studentList = new ArrayList<IStudent>();
	List<IStudent> list2 = new ArrayList<IStudent>();

	@Override
	public void printStudents() {
		for (IStudent s1 : studentList) {
			System.out.printf("%s %s %s %s", s1.getSurname(), s1.getName(),
					s1.getSemester(), s1.getCourse());
			System.out.println();
		}
	}

	@Override
	public List<IStudent> getStudentsInStudgang(String course) {
		for (IStudent s1 : studentList) {
			if (studentList.contains(course)) {
				list2.add(s1);
				System.out.printf("%s %s %s %s", s1.getSurname(), s1.getName(),
						s1.getSemester(), s1.getCourse());
			}
		}
		return list2;
	}
	
	@Override
	public List<IStudent> getStudentsInSemester(int sem) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public IStudent createStudent(String name, String surname, String course)
			throws StudentAlreadyExistException {
		if (studentList.contains(name) && studentList.contains(surname)) {
			throw new StudentAlreadyExistException();
		}
		Student s = new Student(name, surname, 1, course);
		studentList.add(s);
		return s;
	}

	@Override
	public IStudent getStudent(String name, String surname) {

		for (IStudent s1 : studentList) {
			if (studentList.contains(name) && studentList.contains(surname)) {
				return s1;
			}
		}

		return null;
	}

}
 
Zuletzt bearbeitet von einem Moderator:

GroovyChuc

Mitglied
Java:
ackage verwaltung;

public class StudentTest  {
	
	public static void main(String[] args) {
		StudentVerwaltung sv = new StudentVerwaltung();
		try {
			sv.createStudent("Hans", "Wurst", "Kurs1");
			sv.createStudent("Max", "Mustermann", "Kurs2");
			sv.createStudent("Franz", "Meyer", "Kurs1");
			System.out.println(sv.getStudent("Max", "Mustermann"));
		} catch (StudentAlreadyExistException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	sv.printStudents();
	sv.getStudentsInStudgang("KDI");
	}

}

Ausgabe auf der Konsole:
null
Wurst Hans 1 Kurs1
Mustermann Max 1 Kurs2
Meyer Franz 1 Kurs1
 
S

Spacerat

Gast
...Erst mal den Ganzen Unsinn vergessen, wo du Birnen mit Äpfeln besser gesagt Studenten mit Zeichenketten vergleichst. Also Dinge wie "if(studentList.contains(course)" z.B.
 

Landei

Top Contributor
In [c]getStudentsInStudgang[/c] packst du alle "passenden" Studenten in die Member-Variable [c]list2[/c]. Das heißt, dass beim zweiten Aufruf der Methode die Werte vom ersten Aufruf noch in [c]list2[/c] gespeichert sind. Schlimmer noch: Da wo die Liste nach dem ersten Aufruf verwendet wird, ist diese Änderungen auch zu sehen - es handelt sich ja immer um das gleiche Objekt.

Du solltest also [c]list2[/c] unbedingt zu einer lokalen Variable machen.

Prinzipiell solltest du dir über den Unterschied zwischen Member-Variablen und lokalen Variablen klar werden, ebenso die Arbeitsweise von Referenzen. Ich kann aus Erfahrung sagen, dass Fehler dieser Art in einem größeren Programm wirklich sehr schlecht zu finden sind.
 
Zuletzt bearbeitet:

anti-held

Bekanntes Mitglied
wenn du in deinen Schleifen über deine Studenten iterierst, dann überprüfst du mit deinem
Code:
if (studentList.contains(course))
ob die Liste den String course enthält!
Ein vergleich von einem IStudent-Objekt mit einem String, wird immer false ergeben!
Deshalb wird deine Methode getStudentsInStudgang immer nur eine leere Liste zurückgeben.
Ebenso funktionieren deine Vergleiche in den anderen Methoden auch nicht!

in dem Beispiel von getStudentsInStudgang sollte dein Code so aussehen:
Code:
if (s1.getCourse().equals(course))
 

GroovyChuc

Mitglied
wenn du in deinen Schleifen über deine Studenten iterierst, dann überprüfst du mit deinem
Code:
if (studentList.contains(course))
ob die Liste den String course enthält!
Ein vergleich von einem IStudent-Objekt mit einem String, wird immer false ergeben!
Deshalb wird deine Methode getStudentsInStudgang immer nur eine leere Liste zurückgeben.
Ebenso funktionieren deine Vergleiche in den anderen Methoden auch nicht!

in dem Beispiel von getStudentsInStudgang sollte dein Code so aussehen:
Code:
if (s1.getCourse().equals(course))
Danke die Abfrage funktioniert jetzt :)

In getStudentsInStudgang packst du alle "passenden" Studenten in die Member-Variable list2 . Das heißt, dass beim zweiten Aufruf der Methode die Werte vom ersten Aufruf noch in list2 gespeichert sind. Schlimmer noch: Da wo die Liste nach dem ersten Aufruf verwendet wird, ist diese Änderungen auch zu sehen - es handelt sich ja immer um das gleiche Objekt.

Du solltest also list2 unbedingt zu einer lokalen Variable machen.

Prinzipiell solltest du dir über den Unterschied zwischen Member-Variablen und lokalen Variablen klar werden, ebenso die Arbeitsweise von Referenzen. Ich kann aus Erfahrung sagen, dass Fehler dieser Art in einem größeren Programm wirklich sehr schlecht zu finden sind.

Ich verstehe nicht ganz wie ich eine Listenvariable als lokal definieren kann.
Das Problem mit dem zweiten Aufruf würde ich so angehen:
Code:
list2 = null;
Damit kann die liste jedesmal neu genutzt werden.
Allerdings kommt bei mir folgende Exeption wenn ich diese Zeile
Code:
list2.add(s1);
ausführe:

Code:
Exception in thread "main" java.lang.NullPointerException

at verwaltung.StudentVerwaltung.getStudentsInStudgang(StudentVerwaltung.java:28)

at verwaltung.StudentTest.main(StudentTest.java:17)

Hier nochmal der Code:
Java:
	@Override
	public void printStudents() {
		for (IStudent s1 : studentList) {
			System.out.printf("%s %s %s %s", s1.getSurname(), s1.getName(),
					s1.getSemester(), s1.getCourse());   <------- Line 17
			System.out.println();
		}
	}

	@Override
	public List<IStudent> getStudentsInStudgang(String course) {
		list2 = null;
		for (IStudent s1 : studentList) {
			if (s1.getCourse().equals(course)) {

				list2.add(s1);         <------- Line 28
			}
		}
		return list2;
	}
 
S

SlaterB

Gast
> Damit kann die liste jedesmal neu genutzt werden.

mache das auch, null-Setzen kannst du dir eher sparen:
list2 = new ArrayList<IStudent>();

in eine null-Liste kann nichts eingefügt werden

> Ich verstehe nicht ganz wie ich eine Listenvariable als lokal definieren kann.

die StudentVerwaltung hast du in der main lokal definiert, statt ein statische Attribut zu benötigen,
einfach kein Attribut, normale lokale Variable

Student s hast du in createStudent() lokal definiert ohne ein Attribut zu benötigen,
scheint gar nicht so schwer, oder?
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
L Datentypen Deklarierte Felder einer Generic Klasse bestimmen Java Basics - Anfänger-Themen 7
O Comparable Generic Java Basics - Anfänger-Themen 24
F Type safety: A generic array of.. Fehler Java Basics - Anfänger-Themen 3
Yjuq Generic Methode - Wie muss die List Definition aussehen? Java Basics - Anfänger-Themen 3
S Gibt es für die Klasse HashMap Generic Implementierungen? Java Basics - Anfänger-Themen 11
C Generic im Konstruktor Java Basics - Anfänger-Themen 1
O Generic - Verstädnisproblem Java Basics - Anfänger-Themen 5
G instanceof in Generic Java Basics - Anfänger-Themen 7
N Datentypen LocalDate Generic Comparable Java Basics - Anfänger-Themen 2
P Variablen generic type variablen in object array Java Basics - Anfänger-Themen 1
M Generic Prüfungsvorbereitung Java Basics - Anfänger-Themen 4
J Generic - Autoboxing Java Basics - Anfänger-Themen 18
N Generic clonen => eclipse empfiehlt @SuppressWarnings("unchecked") Java Basics - Anfänger-Themen 2
S Generic Java Basics - Anfänger-Themen 9
P Java Generic Wildcard Java Basics - Anfänger-Themen 2
G Namen der Generic Klasse Java Basics - Anfänger-Themen 3
D generic extendet class Java Basics - Anfänger-Themen 10
M Generic's und Vererbung Java Basics - Anfänger-Themen 6
B Generic? Enum - So lösbar? Java Basics - Anfänger-Themen 8
capgeti Datentypen Static generic return value von Subclass? Java Basics - Anfänger-Themen 9
C Generic Tutorial Java Basics - Anfänger-Themen 12
T Generic vom Generic: Zu sehr verschachtelt? Java Basics - Anfänger-Themen 6
V libssrckdtree-j Generic k-d tree Java library - weiss nicht wo des hin soll Java Basics - Anfänger-Themen 2
L Sinn hinter Generic? Java Basics - Anfänger-Themen 5
0 Was bedeutet dieser Generic-code? Java Basics - Anfänger-Themen 3
A Generic Problem Java Basics - Anfänger-Themen 16
S Generic Methode: syntax klemmt Java Basics - Anfänger-Themen 10
S Generic: Verständnisfrage Java Basics - Anfänger-Themen 2
S generic programmierung "ne:w T[X]" Java Basics - Anfänger-Themen 2
G generic interface problem Java Basics - Anfänger-Themen 12
Safado generic array creation Java Basics - Anfänger-Themen 2
G Frage zur Generic java ? Java Basics - Anfänger-Themen 9
G eine Frage zur Generic Java ? Java Basics - Anfänger-Themen 8
D Listen in Listen in Listen ... ??? Java Basics - Anfänger-Themen 2
XWing listen Java Basics - Anfänger-Themen 7
FunkyPhil94 addLast und addFirst bei Listen Java Basics - Anfänger-Themen 6
S Einfach-Verkettete-Listen Ausgabe zeigt nur 1. und letzte instanz Java Basics - Anfänger-Themen 2
J 2 listen vergleichen, die auch null Elemente haben können ! Java Basics - Anfänger-Themen 9
W Liste mit Listen in JTable darstellen Java Basics - Anfänger-Themen 1
Buroto Threads Verschiedene .txt Dateien Auf Listen und Verbinden Java Basics - Anfänger-Themen 3
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
T Collections Sind Subklassen-Objekte in Listen mit Generics erlaubt? Java Basics - Anfänger-Themen 16
S Lineare listen verkettung Java Basics - Anfänger-Themen 7
S Listen Java Basics - Anfänger-Themen 12
S Listen , Nodes am ende anängen Java Basics - Anfänger-Themen 6
P Sortieren von Listen nach Attributen Java Basics - Anfänger-Themen 3
M Java Listen Java Basics - Anfänger-Themen 4
V einfach verkettete Listen Java Basics - Anfänger-Themen 10
A PhoneBook mit verketteten listen Java Basics - Anfänger-Themen 48
F ich brauche Hilfe bei Listen Java Basics - Anfänger-Themen 13
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
G Java Listen und Iterator Java Basics - Anfänger-Themen 2
S Erklaerung Listen Java Basics - Anfänger-Themen 27
J Implementierung Listen-ADT Java Basics - Anfänger-Themen 131
I Alle Elemente von zwei Listen vergleichen Java Basics - Anfänger-Themen 1
L Skip Listen Java Basics - Anfänger-Themen 5
S Collections funktionale Listen (ListNode<E>) review und problem beim clone Java Basics - Anfänger-Themen 0
L Wie testet man (selbstgeschriebene) Listen sinnvoll? Java Basics - Anfänger-Themen 2
F Problem mit Listen Java Basics - Anfänger-Themen 5
J Listen Operationen Java Basics - Anfänger-Themen 4
O Unterschied Arrays, Listen, Mengen Java Basics - Anfänger-Themen 24
J Eine Liste von Listen erstellen Java Basics - Anfänger-Themen 11
A Sortierte Listen Java Basics - Anfänger-Themen 4
L Datenstrukturen/ Listen Java Basics - Anfänger-Themen 17
A Was könnten typische Prüfungsaufgaben zum Thema lineare, verkettete Listen sein? Java Basics - Anfänger-Themen 5
L Listen und Felder Java Basics - Anfänger-Themen 2
M Fragen zum Anlegen und Benutzen von Listen Java Basics - Anfänger-Themen 9
R Arrays und Listen Java Basics - Anfänger-Themen 1
R Listen richtig implementieren Java Basics - Anfänger-Themen 3
F Multidimensionale Listen Java Basics - Anfänger-Themen 3
F Wie String in unterschiedliche Listen teilen Java Basics - Anfänger-Themen 7
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
T Objekte in Listen vererben Java Basics - Anfänger-Themen 3
A Klassen Klassen und Listen... Java Basics - Anfänger-Themen 5
Hacer Operationen einfach verketteter Listen Java Basics - Anfänger-Themen 22
S Methoden Vergleichen von zwei Listen in der Geschwindigkeit von O(n+m) Java Basics - Anfänger-Themen 32
P Listen sortieren mit Binärbaum gibt keine Ausgabe ab 10000 Integern Java Basics - Anfänger-Themen 14
C Listen Java Basics - Anfänger-Themen 3
C Zwei Listen verbinden Java Basics - Anfänger-Themen 1
C Zahlen merken mit Hilfe von Arrays/Listen Java Basics - Anfänger-Themen 2
E Feld von verketteten Listen Java Basics - Anfänger-Themen 11
T Überprüfung einer Aufgabe zu verketteten Listen Java Basics - Anfänger-Themen 5
S Liste mit Objekten und Listen Java Basics - Anfänger-Themen 9
JarJarBigs Frage zu Listen Java Basics - Anfänger-Themen 2
N verkettete Listen Java Basics - Anfänger-Themen 4
O Listen sort-Methode Java Basics - Anfänger-Themen 1
I Listen sortieren bei mehreren Listen zu einer Java Basics - Anfänger-Themen 2
L Lineare Listen Java Basics - Anfänger-Themen 2
S Listen Objekte nach LocalDateTime sortieren Java Basics - Anfänger-Themen 2
D Methoden Listen generieren Java Basics - Anfänger-Themen 4
A Sichtbarkeit in Methoden/Listen Java Basics - Anfänger-Themen 3
M verkettete Listen Java Basics - Anfänger-Themen 1
D Klausur Vorbereitung: Listen, Rekursion, Bäume & Vererbung Java Basics - Anfänger-Themen 3
S Vergleich von Listen Java Basics - Anfänger-Themen 6
I Zwei Listen vergleichen Java Basics - Anfänger-Themen 2
M Listen erstellen mit unterschiedlichen Reihenfolgen Java Basics - Anfänger-Themen 3
I Zwei Listen vergleichen bei n:m Beziehung Java Basics - Anfänger-Themen 2
I Zwei Listen: Wenn nicht vorhanden löschen Java Basics - Anfänger-Themen 4
I Prüfen von zwei Listen Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben