Zeit Management System einige Fehler

forsti222

Mitglied
Ich muss für die Uni ein Zeitmanagement System progenn und gerate dort auf einige Schwierigkeiten. Hoffe darauf dass mir jemand Die fehler aufzeigen kann und ein bisschen erklären kann was geändert werden muss:
Ich habe Probleme mit dem Löschen eines Läufers. Funktioniert einfach nicht! (Delete Attendee)
Dann kann ich die Zwischenzeiten nicht richtig auslesen, da kommt immer eine 0 Pointer Warnung, was mache ich da Falsch? (getTimeStampsof)
Und bei der Size habe ich auch noch 0 Ahnung wie ich das lösen soll. Hat da Jemand eine Idee?
Ich danke vielmals für die Hilfe. Hoffe ihr habt mitleid mit einen lernenden Studenten, der euch dann gerne hilft sobald ich voll drin bin :)
Java:
public class MarathonTimeManagement {
	private Attendee start;
  
	public MarathonTimeManagement() {
	// Konstruktor f?ºr leere Liste
	start = null;
	}
	public int getSize() //gibt die Anzahl der Teilnehmer in der Liste zurück
	{
		return 1;
	}
	public boolean addAttendee(Attendee attendee) //fügt einen Teilnehmer(knoten) aufsteigend sortiert nach dessen Namen in die Liste ein. Die Methode gibt true zurück falls das Einfügen erfolgreich war. Falls bereits ein Teilnehmer mit gleichem Namen in der Liste vorhanden ist, wird der neue Teilnehmer nicht eingefügt, und es wird false zurückgegeben.
	{
		// 1. Fall: Liste ist noch leer
		if (start == null) {
			start = attendee;
			return true;
		}
		boolean ok = false;
   
		// 2. Fall: neues Element kommt an den Anfang der Liste
		if(start.getName().compareTo(attendee.getName())==0)
		{
			return false;
		}
		if(start.getName().compareTo(attendee.getName())>0)
		{
			ok = true;
		}

		if (ok == true ) {
			attendee.next = start;
			start = attendee;
			return true;
		}
    
		// 3. Fall: Liste durchlaufen
		Attendee letzter = start;
		Attendee aktuell = start.next;
		while ((aktuell != null) && (aktuell.getName().compareTo(attendee.getName()) < 0)) {
			if(aktuell.getName().compareTo(attendee.getName()) == 0)
			{
				return false;
			}
			aktuell = aktuell.next;
			letzter = letzter.next;
		}

		// gefunden, jetzt einfügen
    		letzter.next = attendee;
    		if (aktuell != null) {    // neu ist nicht letztes Element
    			attendee.next = aktuell;
   	 	}
    		return true;
	
	}
	public void deleteAttendee(String name) //löscht den Teilnehmer mit dem entsprechenden Namen falls dieser existiert aus der Liste.
	{
		Attendee last = start;
		Attendee aktuell = last.next;
		for(;aktuell.getName().equals(name) != true && aktuell!= null && last.getName().equals(name)!= true;aktuell=aktuell.next)
		{
  		
		}
		if(last == start)
		{
			start = aktuell.next;
		}
		else
		{
			last.next = last.next.next;
		}	
	}

	public Attendee getAttendee(String name) //gibt eine Referenz auf den Teilnehmer mit dem entsprechenden Namen zurück (falls vorhanden, sonst null).
	{
		Attendee aktuell = start;
		while(aktuell.next != null)
		{
			if(aktuell.getName().equals(name) == true)
			{
 	 	 	 return aktuell;
 	 	 	}
 	 	 aktuell = aktuell.next;
 	 }
 	 return null;
	}
	public void addSplitTimeTo(String name, TimeStamp time) //fügt eine Zwischenzeit (am Ende der Zwischenzeitenliste) zum entsprechenden Teilnehmer hinzu. Verwenden Sie zum Finden des Teilnehmers wenn möglich eine schon implementierte Methode.
	{
		Attendee attendee=getAttendee(name);
		if(attendee.anzahlZwischenZeiten<=0){
			attendee.timeStamps=time;
		}else{
			// TimeStamp ts = new TimeStamp(attendee.timeStamps.getTimeStamp());
			TimeStamp current = new TimeStamp(attendee.timeStamps.getTimeStamp());
			TimeStamp previous = new TimeStamp(attendee.timeStamps.getTimeStamp());
			while(current != null ){
				previous = current;
				current = current.next; 
			}//while
 	 	 
			attendee.timeStamps.next = time;
			System.out.println("Ausgabe:"+attendee.timeStamps.next);
		}//else
		attendee.anzahlZwischenZeiten++;
	}//Methode 
	
	public void printAttendees() //gibt die Namen der Teilnehmer aus.
	{
		Attendee aktuell = start;
		while (aktuell != null) {
		System.out.println(aktuell.getName());
		aktuell = aktuell.next;
    		}
	}
	public void printTimeStampsOf(String name) //gibt die Zwischenzeiten des entsprechenden Teilnehmers aus
	{
		Attendee aktuell = start;
		int i = 0;
		System.out.println(aktuell.anzahlZwischenZeiten);
		while(aktuell.next != null)
		{
			if(aktuell.getName().equals(name) == true)
			{
				while(aktuell.timeStamps != null)
				{
					System.out.println(aktuell.timeStamps);
					aktuell.timeStamps = aktuell.timeStamps.next;
				}
			}
			aktuell = aktuell.next;
		}
		return;
	}
	public void printAttendeeTimeStamps() //Gibt die Teilnehmer sowie deren Zwischenzeiten aus. (Verwenden Sie eine private Methode zum Ausgeben der Zwischenzeiten des entsprechenden Teilnehmers).
	{
	}
	//public long[] getSplitTimes(String name) //gibt ein Array mit den Zwischenzeiten als long-Werte des entsprechenden Teilnehmers zurück (falls vorhanden).
	{
		
	}
	public double getAverageSplitTime(String name) //Berechnet die Durchschnittszeit (der einzelnen Zwischenzeiten) des entsprechenden Teilnehmers. Verwenden Sie zum Auslesen der Zwischenzeiten des Teilnehmers wenn möglich eine schon implementierte Methode.
	{
		return 1;
	}
	//private helper methods
	private void printTimeStampsOf(Attendee attendee) //gibt die Zwischenzeiten des übergebenen Teilnehmers aus.
	{
	}

public static void main(String[] args) {
    System.out.println("Name des Läufers 1 eingeben:");
    String s = Input.readString();
    
    // starte mit leerer Liste
    MarathonTimeManagement m = new MarathonTimeManagement();
    Attendee neu = new Attendee(s);
    m.addAttendee(neu);
    System.out.println("Name des Läufers 2 eingeben:");
    String x = Input.readString();
    Attendee neu2 = new Attendee(x);
    m.addAttendee(neu2);
    System.out.println("Name des Läufers 3 eingeben:");
    String y = Input.readString();
    Attendee neu3 = new Attendee(y);
    m.addAttendee(neu3);
    // gib die Liste aus
    m.printAttendees();
  //  m.deleteAttendee("Walex");

    TimeStamp time = new TimeStamp(100021323);
    m.addSplitTimeTo("Alex",time);
    TimeStamp time1 = new TimeStamp(200021323);
    m.addSplitTimeTo("Alex",time1);
    m.printTimeStampsOf("Alex");
    TimeStamp time2 = new TimeStamp(300021323);
    m.addSplitTimeTo("Alex",time2);
    m.printTimeStampsOf("Alex");
}
}
Java:
public class Attendee {
	
	
	private String name;
	public int anzahlZwischenZeiten = 0;
	public Attendee next=null;
	public TimeStamp timeStamps = null;
	
	public Attendee(String name){
		this.name = name;
	}
	
	
	public String getName(){
		return name;
	}
	

}
Java:
public class TimeStamp {
	
	public TimeStamp next = null;
	private long time;
	
	
	public TimeStamp(long time){
		this.time = time;
	}
	
	public void print(){
		System.out.println(time);
	}
	
	public long getTimeStamp(){
		return time;
	}
	
	public String toString(){
		return Long.toString(time);
	}

}
 
Ich hab mir den Code nur mal grob angeschaut, wo welche Fehler liegen kann ich dir also noch nicht sagen, aber ich find deinen Code etwas witzig (nicht übel nehmen ...) ^^ Vom Aufbau und vom Vorgehen her ist das kein Java, sonder C, was du da machst. Beispielsweise hätte man mit mehr OOP eine bessere Struktur reinbekommen können oder was die verketteten Listen angeht, wird das so in der Aufgabenstellung verlangt oder hast du das einfach von C übernommen?
 
Ja die Verwendung von verketteten Listen wird verlangt!
Habe ich eigentlich nicht von C übernommen.
Vielleicht könntest ja mal drüber schauen und mir ein paar Korrektur vorschläge nennen!
Danke dir!
 
Dennoch C-mäßig, weil man in Java z.B. Getter und Setter verwendet anstatt direkt auf die Eigenschaften zuzugreifen. Aber ist auch egal, ich versuchs mal zum Laufen zu bekommen, aber kannst ja schauen, ob du es nicht vielleicht auch selbst hinbekommst ^^

EDIT:
Achso, zu den verketteten Listen: Verlangt werden ist eine Sache, aber musstet ihr die wirklich selbst erstellen? Es gibt ja genug fertig Klassen dafür, die auch noch fehlerfrei funktionieren (ersparrt eine Menge Stress ;)), deswegen hat mich das gewundert.

So, ich habe soweit alles zum Laufen bekommen und bisschen getestet, bei mir tauchten keine Fehler auf, was nicht heißen soll, dass es keine gibt. Zum Codestil hab ich ja auch was gesagt ;) Aber dennoch was dazu. Und zwar hast du an der einen oder anderen Stelle sehr merkwürdige Variablennamen, z.B. y. So eine Variable sagt überhaupt nix aus, geschweige denn wofür sie da ist. Solltest du dir abgewöhnen ^^

So, hier der überarbeitete Code:
Java:
package de.tutorials.forum.hilfe.forsti222.zeitmanagement;

public class MarathonTimeManagement {
	private Attendee	start;

	public static void main(String[] args) {
		// starte mit leerer Liste
		MarathonTimeManagement m = new MarathonTimeManagement();
		Attendee attendee = null;

		System.out.println("Namen der Läufer::");
		// Läufer 1
		System.out.println("Name des Läufers 1 eingeben:");
		String s = Input.readString();
		attendee = new Attendee(s);
		m.addAttendee(attendee);

		// Läufer 2
		System.out.println("Name des Läufers 2 eingeben:");
		String x = Input.readString();
		attendee = new Attendee(x);
		m.addAttendee(attendee);

		// Läufer 3
		System.out.println("Name des Läufers 3 eingeben:");
		String y = "Walex"; // Input.readString();
		attendee = new Attendee(y);
		m.addAttendee(attendee);

		// Läufer ausgeben
		System.out.println("\nDie Läufer::");
		m.printAttendees();
		m.deleteAttendee("Walex");
		m.printAttendees();

		// TimeStamps setzen und ausgeben
		System.out.println("\nTimeStamps der Läufer::");
		TimeStamp time = new TimeStamp(100021323);
		m.addSplitTimeTo("Alex", time);
		m.printTimeStampsOf("Alex");

		time = new TimeStamp(200021323);
		m.addSplitTimeTo("Alex", time);
		m.printTimeStampsOf("Alex");

		time = new TimeStamp(300021323);
		m.addSplitTimeTo("Alex", time);
		m.printTimeStampsOf("Alex");
		
		m.printTimeStampsOf("Walex");
	}

	// Konstruktor für leere Liste
	public MarathonTimeManagement() {
		// Unnötig, da Objekte implizit sowieso mit null initialisiert werden
		// start = null;
	}

	// fügt einen Teilnehmer(knoten) aufsteigend sortiert nach dessen Namen in
	// die Liste ein. Die Methode gibt true zurück falls das Einfügen
	// erfolgreich war. Falls bereits ein Teilnehmer mit gleichem Namen in der
	// Liste vorhanden ist, wird der neue Teilnehmer nicht eingefügt, und es
	// wird false zurückgegeben.
	public boolean addAttendee(Attendee attendee) {
		// 1. Fall: Liste ist noch leer
		if(start == null) {
			start = attendee;

			return true;
		}

		// 2. Fall: neues Element kommt an den Anfang der Liste
		if(start.getName().equals(attendee.getName())) {
			return false;
		} else if(start.getName().compareTo(attendee.getName()) > 0) {
			attendee.next = start;
			start = attendee;

			return true;
		}

		// 3. Fall: Liste durchlaufen
		Attendee letzter = start;
		Attendee aktuell = start.next;
		while(aktuell != null && aktuell.getName().compareTo(attendee.getName()) < 0) {
			// Wenn Bedingung < 0, dann kann doch nicht noch == 0 sein o.O
			// if(aktuell.getName().compareTo(attendee.getName()) == 0) { return
			// false; }
			aktuell = aktuell.next;
			letzter = letzter.next;
		}

		// gefunden, jetzt einfügen
		letzter.next = attendee;

		// neu ist nicht letztes Element
		if(aktuell != null) {
			attendee.next = aktuell;
		}

		return true;
	}

	// fügt eine Zwischenzeit (am Ende der Zwischenzeitenliste) zum
	// entsprechenden Teilnehmer hinzu. Verwenden Sie zum Finden des Teilnehmers
	// wenn möglich eine schon implementierte Methode.
	public void addSplitTimeTo(String name, TimeStamp time) {
		Attendee attendee = getAttendee(name);
		if(attendee == null) { return; }

		if(attendee.timeStamps == null) {
			attendee.timeStamps = time;
		} else {
			// Wo ist der Sinn?
			// TimeStamp current = new TimeStamp(
			// attendee.timeStamps.getTimeStamp());
			// while(current != null) {
			// current = current.next;
			// }

			// Ans Ende der TimeStamps springen und den neuen hinzufügen
			TimeStamp ts = attendee.timeStamps;
			while(ts.next != null) {
				ts = ts.next;
			}
			ts.next = time;
		}

		attendee.anzahlZwischenZeiten++;
	}

	// löscht den Teilnehmer mit dem entsprechenden Namen falls dieser existiert
	// aus der Liste.
	public void deleteAttendee(String name) {
		Attendee prev = start;
		Attendee tmp = prev.next;

		// Erstmal den Anfang überprüfen
		if(prev != null && prev.getName().equals(name)) {
			start = start.next;
			return;
		}

		// Da der Anfang nicht das gesuchte Objekt war, auch alle anderen
		// überprüfen
		while(tmp != null) {
			if(tmp.getName().equals(name)) {
				// Namensgleichheit, also gefunden und somit rauslöschen
				prev.next = tmp.next;

				break;
			}

			// Ungleiche Namen, also auf zum nächsten
			prev = tmp;
			tmp = tmp.next;
		}
	}

	// gibt eine Referenz auf den Teilnehmer mit dem entsprechenden Namen zurück
	// (falls vorhanden, sonst null).
	public Attendee getAttendee(String name) {
		Attendee aktuell = start;
		while(aktuell != null) {
			if(aktuell.getName().equals(name)) { return aktuell; }
			aktuell = aktuell.next;
		}

		return null;
	}

	// Berechnet die Durchschnittszeit (der einzelnen Zwischenzeiten) des
	// entsprechenden Teilnehmers. Verwenden Sie zum Auslesen der Zwischenzeiten
	// des Teilnehmers wenn möglich eine schon implementierte Methode.
	public double getAverageSplitTime(String name) {
		return 1;
	}

	// gibt die Anzahl der Teilnehmer in der Liste zurück
	public int getSize() {
		return 1;
	}

	// gibt ein Array mit den Zwischenzeiten als long-Werte des entsprechenden
	// Teilnehmers zurück (falls vorhanden).
	public long[] getSplitTimes(String name) {
		return null;

	}

	public void printAttendees() {
		Attendee aktuell = start;
		while(aktuell != null) {
			System.out.println(aktuell.getName());
			aktuell = aktuell.next;
		}
	}

	// Gibt die Teilnehmer sowie deren Zwischenzeiten aus. (Verwenden Sie eine
	// private Methode zum Ausgeben der Zwischenzeiten des entsprechenden
	// Teilnehmers).
	public void printAttendeeTimeStamps() {}

	// gibt die Zwischenzeiten des übergebenen Teilnehmers aus.
	private void printTimeStampsOf(Attendee attendee) {
		System.out.println(attendee.anzahlZwischenZeiten);
		while(attendee.timeStamps != null) {
			System.out.println(attendee.timeStamps);
			attendee.timeStamps = attendee.timeStamps.next;
		}

		attendee = attendee.next;
	}

	// gibt die Zwischenzeiten des entsprechenden Teilnehmers aus
	public void printTimeStampsOf(String name) {
		Attendee attendee = getAttendee(name);
		if(attendee == null) { return; }

		printTimeStampsOf(attendee);
	}
}
 
Zuletzt bearbeitet:
Schonmal vielen Dank für die ganze Arbeit :)
1 Frage hätte ich dann noch und zwar wie lasse ich mir die Size/Anzahl der Elemente in einer Liste ausgeben?

danke
 
Ich denke da hast du kaum andere Möglichkeiten, als alle Einträge mit einer Schleife zu durchlaufen und einen Counter entsprechend mitzählen zu lassen. Man könnte es auch etwas leichter machen und die Größe als Eigenschaft deklarieren und dann entsprechend zu verändern, z.B. bei den add-Methoden dann inkrementieren und bei den delete-Methoden dekrementieren. Bei der Klasse Attendee hast du es ja mit der Anazhl der Zwischenzeiten auch so gemacht.
 
Ok danke für dies :)
Leider taucht nun noch ein Problem auf.
Ich habe im Code folgendes ergänzt:
Java:
 public long[] getSplitTimes(String name) {
    	    Attendee attendee = getAttendee(name);
    	    long [] SplitTime = new long[attendee.anzahlZwischenZeiten-1];
    	    int i = 0;
    	    System.out.println("test:"+attendee.timeStamps);
    	    while(attendee.timeStamps != null) {
            SplitTime[i] = attendee.timeStamps.getTimeStamp();
            System.out.println("TimeStamp:"+SplitTime[i]);
            attendee.timeStamps = attendee.timeStamps.next;
            i++;
            }
    	    return SplitTime;
 
    }
Dort findet er aber keine SPlit Times zum Läufer Alex. Ergebnis ist einfach null, obwohl die Zwischenzeiten, wie von dir eingegeben werden. Kannst du mir da nochmal weiterhelfen?
 
Das war wegen einem Fehler von dir, den ich noch nicht verbessert hatte. War mir aber auch nicht aufgefallen, von daher ist es auch irgendwo meine Schuld ^^ Ich habe jetzt deswegen hier und da was machen müssen, ich weiß aber leider nicht mehr wo -.- Deshalb hier wieder der ganze Code:
Java:
package de.tutorials.forum.hilfe.forsti222.zeitmanagement;


public class MarathonTimeManagement {
	private Attendee	start;

	public static void main(String[] args) {
		// starte mit leerer Liste
		MarathonTimeManagement m = new MarathonTimeManagement();
		Attendee attendee = null;

		System.out.println("Namen der Läufer::");
		// Läufer 1
		System.out.println("Name des Läufers 1 eingeben:");
		String s = Input.readString();
		attendee = new Attendee(s);
		m.addAttendee(attendee);

		// Läufer 2
		System.out.println("Name des Läufers 2 eingeben:");
		String x = Input.readString();
		attendee = new Attendee(x);
		m.addAttendee(attendee);

		// Läufer 3
		System.out.println("Name des Läufers 3 eingeben:");
		String y = "Walex"; // Input.readString();
		attendee = new Attendee(y);
		m.addAttendee(attendee);

		// Läufer ausgeben
		System.out.println("\nDie Läufer::");
		m.printAttendees();
		m.deleteAttendee("Walex");
		m.printAttendees();

		// TimeStamps setzen und ausgeben
		System.out.println("\nTimeStamps der Läufer::");
		TimeStamp time = new TimeStamp(100021323);
		m.addSplitTimeTo("Alex", time);
		m.printTimeStampsOf("Alex");

		time = new TimeStamp(200021323);
		m.addSplitTimeTo("Alex", time);
		m.printTimeStampsOf("Alex");

		time = new TimeStamp(300021323);
		m.addSplitTimeTo("Alex", time);
		m.printTimeStampsOf("Alex");

		m.printTimeStampsOf("Walex");

		long[] timeSplit = m.getSplitTimes("Alex");
		for(long tmp : timeSplit) {
			System.out.println(tmp);
		}
	}

	// Konstruktor für leere Liste
	public MarathonTimeManagement() {
		// Unnötig, da Objekte implizit sowieso mit null initialisiert werden
		// start = null;
	}

	// fügt einen Teilnehmer(knoten) aufsteigend sortiert nach dessen Namen in
	// die Liste ein. Die Methode gibt true zurück falls das Einfügen
	// erfolgreich war. Falls bereits ein Teilnehmer mit gleichem Namen in der
	// Liste vorhanden ist, wird der neue Teilnehmer nicht eingefügt, und es
	// wird false zurückgegeben.
	public boolean addAttendee(Attendee attendee) {
		// 1. Fall: Liste ist noch leer
		if(start == null) {
			start = attendee;

			return true;
		}

		// 2. Fall: neues Element kommt an den Anfang der Liste
		if(start.getName().equals(attendee.getName())) {
			return false;
		} else if(start.getName().compareTo(attendee.getName()) > 0) {
			attendee.next = start;
			start = attendee;

			return true;
		}

		// 3. Fall: Liste durchlaufen
		Attendee letzter = start;
		Attendee aktuell = start.next;
		while(aktuell != null && aktuell.getName().compareTo(attendee.getName()) < 0) {
			// Wenn Bedingung < 0, dann kann doch nicht noch == 0 sein o.O
			// if(aktuell.getName().compareTo(attendee.getName()) == 0) { return
			// false; }
			aktuell = aktuell.next;
			letzter = letzter.next;
		}

		// gefunden, jetzt einfügen
		letzter.next = attendee;

		// neu ist nicht letztes Element
		if(aktuell != null) {
			attendee.next = aktuell;
		}

		return true;
	}

	// fügt eine Zwischenzeit (am Ende der Zwischenzeitenliste) zum
	// entsprechenden Teilnehmer hinzu. Verwenden Sie zum Finden des Teilnehmers
	// wenn möglich eine schon implementierte Methode.
	public void addSplitTimeTo(String name, TimeStamp time) {
		Attendee attendee = getAttendee(name);
		if(attendee == null) { return; }

		if(attendee.timeStamps == null) {
			attendee.timeStamps = time;
		} else {
			// Wo ist der Sinn?
			// TimeStamp current = new TimeStamp(
			// attendee.timeStamps.getTimeStamp());
			// while(current != null) {
			// current = current.next;
			// }

			// Ans Ende der TimeStamps springen und den neuen hinzufügen
			TimeStamp ts = attendee.timeStamps;
			while(ts.next != null) {
				ts = ts.next;
			}
			ts.next = time;
		}

		attendee.anzahlZwischenZeiten++;
	}

	// löscht den Teilnehmer mit dem entsprechenden Namen falls dieser existiert
	// aus der Liste.
	public void deleteAttendee(String name) {
		Attendee prev = start;
		Attendee tmp = prev.next;

		// Erstmal den Anfang überprüfen
		if(prev != null && prev.getName().equals(name)) {
			start = start.next;
			return;
		}

		// Da der Anfang nicht das gesuchte Objekt war, auch alle anderen
		// überprüfen
		while(tmp != null) {
			if(tmp.getName().equals(name)) {
				// Namensgleichheit, also gefunden und somit rauslöschen
				prev.next = tmp.next;

				break;
			}

			// Ungleiche Namen, also auf zum nächsten
			prev = tmp;
			tmp = tmp.next;
		}
	}

	// gibt eine Referenz auf den Teilnehmer mit dem entsprechenden Namen zurück
	// (falls vorhanden, sonst null).
	public Attendee getAttendee(String name) {
		Attendee aktuell = start;
		while(aktuell != null) {
			if(aktuell.getName().equals(name)) { return aktuell; }
			aktuell = aktuell.next;
		}

		return null;
	}

	// Berechnet die Durchschnittszeit (der einzelnen Zwischenzeiten) des
	// entsprechenden Teilnehmers. Verwenden Sie zum Auslesen der Zwischenzeiten
	// des Teilnehmers wenn möglich eine schon implementierte Methode.
	public double getAverageSplitTime(String name) {
		return 1;
	}

	// gibt die Anzahl der Teilnehmer in der Liste zurück
	public int getSize() {
		return 1;
	}

	// gibt ein Array mit den Zwischenzeiten als long-Werte des entsprechenden
	// Teilnehmers zurück (falls vorhanden).
	public long[] getSplitTimes(String name) {
		Attendee attendee = getAttendee(name);
		long[] splitTime = new long[attendee.anzahlZwischenZeiten];
		int i = 0;

		System.out.println("test: " + attendee.timeStamps);
		TimeStamp ts = attendee.timeStamps;
		while(ts != null) {
			splitTime[i] = ts.getTimeStamp();
			System.out.println("TimeStamp: " + splitTime[i]);
			ts = ts.next;

			i++;
		}

		return splitTime;
	}

	public void printAttendees() {
		Attendee aktuell = start;
		while(aktuell != null) {
			System.out.println(aktuell.getName());
			aktuell = aktuell.next;
		}
	}

	// Gibt die Teilnehmer sowie deren Zwischenzeiten aus. (Verwenden Sie eine
	// private Methode zum Ausgeben der Zwischenzeiten des entsprechenden
	// Teilnehmers).
	public void printAttendeeTimeStamps() {}

	// gibt die Zwischenzeiten des übergebenen Teilnehmers aus.
	private void printTimeStampsOf(Attendee attendee) {
		System.out.println("Anzahl Zeiten von " + attendee.getName() + ": " + attendee.anzahlZwischenZeiten);
		TimeStamp ts = attendee.timeStamps;
		for(int i = 1; ts != null; i++) {
			System.out.println("Zeit " + i + ": " + ts);
			ts = ts.next;
		}
	}

	// gibt die Zwischenzeiten des entsprechenden Teilnehmers aus
	public void printTimeStampsOf(String name) {
		Attendee attendee = getAttendee(name);
		if(attendee == null) { return; }

		printTimeStampsOf(attendee);
	}
}
Musst du dann schaun, was sich geändert hat, ist nicht viel. Der Fehler lag halt in der Methode printTimeStampsOf(Attendee attendee), weil das originale Objekt verändert wurde. Referenzen können auch nerven xD
 
Ok, dann habe ich noch eine letzte Bitte, dann sollte sich endlich alles geklärt haben :) Hoffe ich zumindest :)
Ich habe noch folgendes geaddet:
Java:
 public void printAttendeeTimeStamps() {
    Attendee aktuell = start;
        while(aktuell != null) {
            System.out.println(aktuell.getName());
            printTimeStampsOf(aktuell);
            aktuell = aktuell.next;
        }
    }
Habe ich da noch ein Referenzproblem? oder wie siehts da aus, da nun auch hier keine Zeiten mehr ausgegeben werden?
danke :)
 
Also an sicht das richtig aus, zur Sicherheit hab ich es noch ausprobiert, bei mir gehts, es werden wirklich von allen Läufern die Zeiten ausgegeben.

Ich weiß auch gar nicht, ob ich noch helfen kann, weil ich heute Abend wieder in die Kaserne muss. Ich nehmen diesmal zwar mein Laptop mit und hab mir auch ein Webstick gekauft, werde also von nun an versuchen auch während der Woche online zu sein. Ansonsten denke ich, dass die anderen sicher auch helfen. Aber was dieses Codestück angeht, so sollte es eigentlich funktionieren, bei mir klappts jedenfalls.
 
Zurück