Dein Array hat doch bereits die richtige Größe, von maximal 6 Wagen. Du musst weder ein Neues erstellen, noch etwas kopieren.
EDIT: Es geht nur darum den "neuen" Wagen an der richtigen Stelle ins Array zu schreiben und die Anzahl entsprechend zu ändern. Evtl. solltest du vorher prüfen, ob der ICE bereits komplett ist.
Also die Aufgabe bestand insgesamt darin:
Zuerst eine Klasse Wagen erstellen mit dem parametrisierten Konstruktor, der die Anzahl der firstClass Sitze und SecondClass Sitze erfasst. Dann soll man eine Klasse IceBahn erstellen. Die ICE Bahn besteht aus einer Liste von Wagen, die mit einem Array der Länge 6 realisiert werden soll. Die aktuelle Wagenazahl soll in anzahlWagen gespeichert werden, welche jedoch zuerst auf 0 gesetzt werden soll. Mit der Methode addWagen muss ich nun in der TestKlasse fähig sein, neue Wagen zur ICE Bahn hinzuzufügen, aber nur solange bis die Länge des Arrays die 6 nicht übersteigt.
Also die Aufgabe bestand insgesamt darin:
Zuerst eine Klasse Wagen erstellen mit dem parametrisierten Konstruktor, der die Anzahl der firstClass Sitze und SecondClass Sitze erfasst. Dann soll man eine Klasse IceBahn erstellen. Die ICE Bahn besteht aus einer Liste von Wagen, die mit einem Array der Länge 6 realisiert werden soll. Die aktuelle Wagenazahl soll in anzahlWagen gespeichert werden, welche jedoch zuerst auf 0 gesetzt werden soll. Mit der Methode addWagen muss ich nun in der TestKlasse fähig sein, neue Wagen zur ICE Bahn hinzuzufügen, aber nur solange bis die Länge des Arrays die 6 nicht übersteigt.
publicclassIceBahn{privatestaticint anzahlWagen =0;// Anzahl gleich 0 Check!staticWagen[] ICE =newWagen[6];// Array Länge 6 Check!publicstaticintgetAnzahlWagen(){return anzahlWagen;}publicstaticvoidaddWagen(Wagen o){Wagen[] newICE =newWagen[anzahlWagen+1];// Wozu? Länge stimmt doch schonfor(int i =0;i<anzahlWagen-1;i++){// Wozu?
newICE[i]= ICE[i];}// end of for
newICE[anzahlWagen]= o;
ICE=newICE;
anzahlWagen++;}}
Die ganzen "static" sollten noch weg, falls ihr schon mit Instanzen von Klasse arbeitet.
@kneitzel Ich habe nun das -1 entfernt und jetzt funktioniert es
Mein Code sieht jetzt so aus:
Java:
privatestaticint anzahlWagen =0;staticWagen[] ICE =newWagen[6];publicstaticintgetAnzahlWagen(){return anzahlWagen;}publicstaticvoidaddWagen(Wagen o){Wagen[] newICE =newWagen[anzahlWagen+1];for(int i =0;i<anzahlWagen ;i++){
newICE[i]= ICE[i];}// end of for
newICE[anzahlWagen]= o;
ICE=newICE;
anzahlWagen++;}}
Wenn ich nun zum Beispiel 3 Wagen zum ICE in der TestKlasse hinzufüge und jeweils dem ersten Wagen 1 firstClass, dem 2 Wagen 2 firstClass und dem dritten Wagen 3 firstClass zuweise und dann
Das mache, werden mir auch 1,2,3 ausgegeben. Ich glaube nun sollte die Aufgabe fast erfüllt sein. Jetzt muss ich Wagen[] ICE nur noch auf private setzen und die Bedingung einfügen, dass höchstens 6 wagen erzeugt werden dürfen.
Ja, das hatten wir glaube ich schon, aber ich finde die Vorlesungen immer viel zu unübersichtilch und habe es nicht wirjlich verstanden. Ich kann doch nicht einfach nur die static wegmachen oder? Dann bekomme ich nämlich die Fehlermeldung, dass eine statische Methode erwartet wird.
Ja, das hatten wir glaube ich schon, aber ich finde die Vorlesungen immer viel zu unübersichtilch und habe es nicht wirjlich verstanden. Ich kann doch nicht einfach nur die static wegmachen oder? Dann bekomme ich nämlich die Fehlermeldung, dass eine statische Methode erwartet wird.
Du musst dann auch eine Instanz von IceBahn erzeugen. Statische Variablen und Methoden gehören zur Klasse (und existieren nur einmal). Nicht Statische zur Instanz (und existieren separat für jede Instanz).
Java:
publicclassICEDemo{publicstaticvoidmain(String[] args){Wagen ICE1 =newWagen(1,1);Wagen ICE2 =newWagen(2,2);Wagen ICE3 =newWagen(3,3);IceBahn bahn =newIceBahn();// Instanz erzeugen
bahn.addWagen(ICE1);// Methode auf die Instanz aufrufen
bahn.addWagen(ICE2);
bahn.addWagen(ICE3);System.out.println(bahn.ICE[0].getFirstClass());System.out.println(bahn.ICE[1].getFirstClass());System.out.println(bahn.ICE[2].getFirstClass());}}
Aber nochmal: Du brauchst kein neues größeres Array und du musst auch nichts kopieren!
Außerdem: In Java beginnen Variablen- und Methodennamen immer mit einem Kleinbuchstaben: "ICE1" => "ice1"
Ja, das passt. Danach musst du natürlich die Wagenanzahl reduzieren.
Dein ursprüngliches Array darf übrigens gerne auch die Länge 0 haben, da du es eh bei jedem Hinzufügen eines Wagens ersetzt.
Ob das nun Sinn der Aufgabe ist ...
So wie ich das aus den Vorposts rausgelesen habe, solltest du es nicht ersetzen/vergrößern, sondern nur befüllen.
Also das einfach auf Null setzen passt nicht. Zumindest nicht in Zusammenhang mit dem bisherigen Code für das Einfügen von Elementen.
Du musst dir genau klar machen, was die einzelnen Variablen für eine Bedeutung haben sollen. Wenn du ein files Array haben willst wo du beim Einfügen immer ein neues Array erstellst, dann muss sas auch von der Logik beim Entfernen ähnlich sein. Dann brauchst du auch keine Variable abschlagen, denn das ist ja die Array Größe.
Wenn du aber unterscheiden willst, zwischen Array Größe und Anzahl Wagen, dann kannst du das Entfernen wie skizziert machen, aber dann musst du das Einfügen aus meiner Sicht anpassen.