Guten Tag,
ich habe ein Klassendiagramm gegeben (siehe Bild), das eine Klasse ArrayList darstellt. Nun habe ich gegooglet und herausgefunden, dass man ArrayLists importieren kann und Methoden wie add, remove etc. bereits von Java zur Verfügung gestellt werden können, was ICH in der Aufgabe wohl nicht darf.
Nun verstehe ich nicht genau wie ich vorgehen soll (2 Fragen): Bspw. steht an erster Stelle von ArrayList die Methode +ArrayList(). Heisst das, ich rufe einen Konstruktor auf mit einer leeren Liste "ArrayList eineListe = new ArrayList();" ?
2. Frage: Links, also ausserhalb des Pakets containers ist ein Java.lang.Object. Jemand ne Ahnung was das bedeuten soll?
Meiner Ansicht nach, sollst du eine eigene Klasse "ArrayList" inkl. "Container" und "List" programmieren. Die von Java bereitgestellte "ArrayList" sollst du nicht verwenden.
Deine erste Frage: Es handelt sich um den Konstruktor, den deine ArrayList gemäß Klassendiagramm haben soll.
Zur zweiten Frage: Hier wird festgelegt, dass die Daten in deiner ArrayList vom Typ "Object" sind.
Zu 1) Ja genau du hast einfach einen default Konstruktor
Zu 2) Die Verbindung im Klassendiagramm zu java.lang.object besteht einfach nur, da du anscheinend keine Generische Klasse programmieren sollst, sondern einfach nur intern ein Array mit "Object" Elementen anlegen sollst.
publicclassArrayList(){private currentElement =0;privateObject[] list =newObject[5];publicvoidadd(Object o){if(list.length == currentElement){//Erstelle Array mit mehr Elementen}else{//fuege Element an der Position von currentElement + 1 hinzu}}}
publicclassArrayList(){private currentElement =0;privateObject[] list =newObject[5];publicvoidadd(Object o){if(list.length == currentElement){//Erstelle Array mit mehr Elementen}else{//fuege Element an der Position von currentElement + 1 hinzu}}}
Da ist aber ein Fehler drin: Wenn das letzte Element des Arrays erreicht ist (die If-Bedingung), dann wird zwar das Array vergrößert, aber der else-Zweig mit dem Hinzufügen wird nicht mehr erreicht. Demnach wird auch kein Element hinzugefügt. Außerdem soll laut Aufgabe ein leeres Array erstellt werden, dass beim Hinzufügen immer um eins erweitert wird.
Hatte daran gedacht, dass Element in der if Anweisung hinzuzufügen. Aber man könnte das else natürlich auch weg lassen, hast du recht.
Ich habe die Aufgabenstellung nicht ganz genau gelesen aber wenn das Array tatsächlich um immer nur eines erweitert werden soll ist das die Ineffizienteste ArrayList die ich je gesehen habe.
Ich habe die Aufgabenstellung nicht ganz genau gelesen aber wenn das Array tatsächlich um immer nur eines erweitert werden soll ist das die Ineffizienteste ArrayList die ich je gesehen habe.
Die Eigenschaft "length" von Arrays ist als "final" deklariert, d.h. du kannst sie nicht ändern. Ist ja auch logisch, da ein Array eine feste, unveränderliche Länge hat.
publicintat(Object o){int pos =0;int notFound =-1;for(int i =0; i < data.length; i++){
pos++;if(o.equals(data[i])){return pos;}else{return notFound;}}}
eigentlich müsste ich nach der vorletzten geschweiften Klammer ein returnstatement setzen, die habe ich aber in der If-Schleife gesetzt. Irgendeinen geschickten Umweg, damit die Methode funktioniert?
Die Methode korrekt schreiben? Überleg mal, was in Deiner Schleife passiert, warum Du eine Schleife hast und was das if (insbesondere der else-Zweig) bewirkt.
Die Methode korrekt schreiben? Überleg mal, was in Deiner Schleife passiert, warum Du eine Schleife hast und was das if (insbesondere der else-Zweig) bewirkt.
Sorry, @mihe7. Ich neige nicht dazu fertige Lösungen zu liefern, aber da seine Lösung zwar umständlich ist, aber im Prinzip richtig, habe ich mal ne Ausnahme gemacht.
Edit: Wobei ich gerade bemerke, dass das "else" zu einem Abbruch nach der ersten Prüfung führt.