publicclassKlassenzimmer{Schueler[] mates;int number =0;publicKlassenzimmer(){
mates =newSchueler[5];}publicvoidadd(Schueler x){
mates[number]= x;
number +=1;if(number <=4){System.out.println(x.forename +" "+ x.name +" kommt rein");}elseif(number >4){System.out.println("Tut uns leid, "+ x.forename +" "+ x.name +". Das Klassenzimmer ist voll");}}publicSchueler[]allGetOut(){// if(taxi.length == 0){// Ich soll ausgeben, wie viele ausgestiegen sind, d.h. wie viele im Taxi saßenSchueler[] taxi0 =newSchueler[0];Schueler[] taxi1 =newSchueler[1];Schueler[] taxi2 =newSchueler[2];Schueler[] taxi3 =newSchueler[3];Schueler[] taxi4 =newSchueler[4];if(number ==1)returnnewSchueler[1];elseif(number ==2)returnnewSchueler[2];elseif(number ==3)returnnewSchueler[3];elseif(number ==4)returnnewSchueler[4];elsereturn taxi0;}@OverridepublicStringtoString(){if(number ==1)return"Das ist das Klassenzimmer von Dr.Jung. Er unterrichtet Marek Kurz ";elseif(number ==2)return"Das ist das Klassenzimmer von Dr.Jung. Er unterrichtet Marek Kurz und Paul Alles";elseif(number ==3)return"Das ist das Klassenzimmer von Dr.Jung. Er unterrichtet Marek Kurz, Paul Alles und Lena Weil.";elseif(number ==4)return"Das ist das Klassenzimmer von Dr.Jung. Er unterrichtet Marek Kurz, Paul Alles, Lena Weil und Fabien Lehm. ";elsereturn"Das ist das Klassenzimmer von Dr.Jung. Er unterrichtet niemanden.";}}
Marek Kurz kommt rein
Paul Alles kommt rein
Lena Weil kommt rein
Susi Born kommt rein
Tut uns leid, Fabien Lehm. Das Klassenzimmer ist voll
[LclassroomForExample.Schueler;@59a6e353
Problem:
Nachdem die Methode allGetOut() ausgeführt wird, soll in einem Array angezeigt werden, wer alles das Klassenzimmer verlassen hat.
Das heißt, falls nur Marek Kurz im Klassenzimmer war, dann soll [Marek Kurz] ausgegeben werden.
Ich erhalte jedoch immer einen Fehler:
allGetOut() returned an array that contains null instead of a proper Schueler object for one of the schueler!
Wie hast Du denn das Array "mates" gefüllt, wenn da ein Schüler in den Klassenraum gekommen ist?
Prinzipiell geht es hier genau so, nur eben musst Du hier nicht einen Schüler, der als Parameter übergeben wird, einfügen, sondern die Schüler, die bereits in mates enthalten sind.
Wie hast Du denn das Array "mates" gefüllt, wenn da ein Schüler in den Klassenraum gekommen ist?
Prinzipiell geht es hier genau so, nur eben musst Du hier nicht einen Schüler, der als Parameter übergeben wird, einfügen, sondern die Schüler, die bereits in mates enthalten sind.
Du hast ein Array mates in dem Schueler gespeichert sind. Desweiteren hast Du eine Variable number, in der gespeichert ist, wie viele Schüler gespeichert wurden.
Somit sieht der Pseudo-Code wie folgt aus:
1. Erzeuge ein neues Array von Schueler mit number elementen. (Also ein Java Konstrukt mit "new" Befehl)
2. Für zähler = 0 bis number-1: Setze neuesArray[zaehler] = mate[zähler] (Also for Schleife mit einer Zuweisung im Schleifenkörper)
3. gib neuesArray zurück. (Also ein return Befehl)
Ich habe in Klammern einmal Hinweise auf Java Befehle gegeben.
Kommst Du mit diesen Hinweisen jetzt weiter? Sorry, wenn es für Dich etwas umständlich scheint, aber mir ist es wichtiger, die Hinweise zu der Lösung zu geben, so dass Du da eher ein Verständnis entwickelst, als Dir nur fertigen Code "um die Ohren zu hauen".
Du hast ein Array mates in dem Schueler gespeichert sind. Desweiteren hast Du eine Variable number, in der gespeichert ist, wie viele Schüler gespeichert wurden.
Somit sieht der Pseudo-Code wie folgt aus:
1. Erzeuge ein neues Array von Schueler mit number elementen. (Also ein Java Konstrukt mit "new" Befehl)
2. Für zähler = 0 bis number-1: Setze neuesArray[zaehler] = mate[zähler] (Also for Schleife mit einer Zuweisung im Schleifenkörper)
3. gib neuesArray zurück. (Also ein return Befehl)
Ich habe in Klammern einmal Hinweise auf Java Befehle gegeben.
Kommst Du mit diesen Hinweisen jetzt weiter? Sorry, wenn es für Dich etwas umständlich scheint, aber mir ist es wichtiger, die Hinweise zu der Lösung zu geben, so dass Du da eher ein Verständnis entwickelst, als Dir nur fertigen Code "um die Ohren zu hauen".
Also Dein lokales mates array überdeckt das mates Array aus der Klasse. Das ist etwas unschön.
Die Schleife ist aber noch nicht korrekt. Ich verbessere es jetzt einmal mit Kommentaren:
Java:
publicSchueler[]allGetOut(){// Schueler[] mates = new Schueler[number];Schueler[] neuesArray =newSchueler[number];// neuesArray habe ich es mal genannt. mates ist ja das Arary in der Klasse// for(int zaehler =0; zaehler <= number-1; neuesArray[zaehler] = mates[zaehler] ){for(int zaehler =0; zaehler <= number-1; zaehler++){// in der for Schleife wird an der dritten Stelle meistens die Variable erhöht.
neuesArray[zaehler]= mates[zaehler];// Hier weisen wir den schüler aus mates dem neuen Array zu.// return neuesArray; // Wir wollen die Schleife ja ganz durchlaufen, daher kein return.}// return mates; // Wäre ok gewesen, wenn ich mates oben nicht umbenannt hätte.return neuesArray;}
Ist das so verständlich? Ich habe jetzt gerade keine Möglichkeit das zu testen. Falls es da noch Probleme geben sollte, dann zeig noch mal den ganzen Code von Dir.
Also Dein lokales mates array überdeckt das mates Array aus der Klasse. Das ist etwas unschön.
Die Schleife ist aber noch nicht korrekt. Ich verbessere es jetzt einmal mit Kommentaren:
Java:
publicSchueler[]allGetOut(){// Schueler[] mates = new Schueler[number];Schueler[] neuesArray =newSchueler[number];// neuesArray habe ich es mal genannt. mates ist ja das Arary in der Klasse// for(int zaehler =0; zaehler <= number-1; neuesArray[zaehler] = mates[zaehler] ){for(int zaehler =0; zaehler <= number-1; zaehler++){// in der for Schleife wird an der dritten Stelle meistens die Variable erhöht.
neuesArray[zaehler]= mates[zaehler];// Hier weisen wir den schüler aus mates dem neuen Array zu.// return neuesArray; // Wir wollen die Schleife ja ganz durchlaufen, daher kein return.}// return mates; // Wäre ok gewesen, wenn ich mates oben nicht umbenannt hätte.return neuesArray;}
Ist das so verständlich? Ich habe jetzt gerade keine Möglichkeit das zu testen. Falls es da noch Probleme geben sollte, dann zeig noch mal den ganzen Code von Dir.