Theoretische Übung 2

Prof. Karsten Weihe
Dozentin/Dozent
Beiträge: 1824
Registriert: 21. Feb 2005 16:33

Re: Theoretische Übung 2

Beitrag von Prof. Karsten Weihe »

spyro.makedonski hat geschrieben: Operator new ist verboten. Das ist klar.
Und mehr nicht, das war's!

spyro.makedonski hat geschrieben: Das benötigt auch Speicherplatz und im ersten Übungsblatt wurde gesagt "der zur Bearbeitung benötigte Speicherplatz konstant sein muss". :)
Ok, kann sein, dass dieser Satz etwas missverständlich ist... :oops:

KW

spyro.makedonski
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 102
Registriert: 18. Apr 2010 13:45

Re: Theoretische Übung 2

Beitrag von spyro.makedonski »

jetzt ist mir alles klar 8). Danke!

Thomas Huxhorn
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 172
Registriert: 6. Okt 2011 15:25

Re: Theoretische Übung 2

Beitrag von Thomas Huxhorn »

Jetzt muss ich doch mal fragen. Irgendwas habe ich da verpasst.
Wie soll man denn über alle Elemente der einzelnen Arrays, und über alle Arrays iterieren mit nur einer Schleife? Das verschieben der einzelnen Elemente in den Arrays ist da auch noch nicht drin.
Oder ist das ganz anders gemeint. Soll ich mir vorstellen, dass die Klasse ArrayList schon alle Funktionen bereitstellt zum iterieren/einfügen/löschen? Die natürlich auch Schleifen enthalten, aber nicht als Hilfsfunktionen gelten und damit erlaubt sind?

Gruß

Benutzeravatar
JannikV
Nerd
Nerd
Beiträge: 609
Registriert: 24. Apr 2011 12:42

Re: Theoretische Übung 2

Beitrag von JannikV »

Nein, keine Hilfsmethoden, keine weiteren Schleifen.

Du fängst beim ersten Element im ersten Array an und guckst ob der Platz frei ist, wenn nicht guckst du nir das nächste Element im gleichen Array an. Wenn es kein weiteres Element mehr gibt machst du beim ersten Element im nächsten Array weiter. Wenn du einen freien Platz gefunden hast merkst du dir den und suchst weiter nach einem Element != null. Wenn du eins hast verschiebst du es und fängst ab da wieder an die nächste freie Position zu suchen.

Das lässt sich alles in einer Schleife machen.

VG

Lukas.Sommer
Windoof-User
Windoof-User
Beiträge: 30
Registriert: 12. Okt 2011 16:36

Re: Theoretische Übung 2

Beitrag von Lukas.Sommer »

Ich hätte noch ein paar Fragen:
1. Dürfen wir annehmen, dass die einzelnen Arrays schon korrekt befüllt sind, also das keine Arrays der Form [1, void, 3] vorliegen?

2. Verstehe ich die Liste in ArrayList richtig, ist das die LinkedList aus dem ersten theoretischen Übungsblatt, die auch die ListItems aus dem ersten Übungsblatt enthält, die wiederum als key ein KeyItem enthalten?

Gruß

aileen
Erstie
Erstie
Beiträge: 20
Registriert: 26. Apr 2012 13:28

Re: Theoretische Übung 2

Beitrag von aileen »

Blub hat geschrieben:hey,

du darfst das first in List auf public setzen oder ein Getter schreiben ;) Die Attribute in ListItem und KeyItem sollten bereits public sein.


Christian
Dazu habe ich noch eine Frage..
Ich habe das first in List auf public gesetzt, aber kann trotzdem in der Klasse ArrayList nicht drauf zugreifen (weil keine List erstellt wurde?)

ListItem<T> current = this.list.first; in ArrayList sagt "first cannot be resolved or is not a field".
Wie komme ich denn sonst an das erste ListItem von List?

Benutzeravatar
JannikV
Nerd
Nerd
Beiträge: 609
Registriert: 24. Apr 2011 12:42

Re: Theoretische Übung 2

Beitrag von JannikV »

Lukas.Sommer hat geschrieben:1. Dürfen wir annehmen, dass die einzelnen Arrays schon korrekt befüllt sind, also das keine Arrays der Form [1, void, 3] vorliegen?
Würde ich mal stark annehmen. So ein Fall kann nur eintreten wenn von außen jemand in der Liste rumpfuscht. Wenn Elemente mit einer remove Methode entfernt werden schiebt diese (bei korrektem Funktionieren) alle anderen Elemente weiter nach oben im Array. Der von dir skizzierte Fall kann also eigentlich nur mitten in der compress Methode vorkommen, wenn du dort selbst eine Lücke produziert hast die nun im nächsten Schritt wieder mit 3 gefüllt wird.
Lukas.Sommer hat geschrieben:2. Verstehe ich die Liste in ArrayList richtig, ist das die LinkedList aus dem ersten theoretischen Übungsblatt, die auch die ListItems aus dem ersten Übungsblatt enthält, die wiederum als key ein KeyItem enthalten?
Ja, das stand hier aber auch schon erklärt.


aileen hat geschrieben:Ich habe das first in List auf public gesetzt, aber kann trotzdem in der Klasse ArrayList nicht drauf zugreifen (weil keine List erstellt wurde?)

ListItem<T> current = this.list.first; in ArrayList sagt "first cannot be resolved or is not a field".
Wie komme ich denn sonst an das erste ListItem von List?
List muss natürlich erstmal initialisiert werden. Entweder im Konstruktor (so hat es Christian leider nicht geschrieben, ich hätte dort list = new List<T>() gemacht), ansonsten musst du es in der add Methode initialisieren :/
Warum dein Code da aber nicht klappen dürfte ist der dass current nicht von diesem Typ ist.
ListItem<KeyItem<T>> wäre richtig.

VG

aileen
Erstie
Erstie
Beiträge: 20
Registriert: 26. Apr 2012 13:28

Re: Theoretische Übung 2

Beitrag von aileen »

Bei dem Typ von current hatte ich mich verschrieben, entschuldigung. Auch mit ListItem<KeyItem<T>> klappt es nicht.
Das heißt ich muss mir eine Methode add() schreiben, die list initialisiert & muss in compress() dann erst mal add aufrufen?

Benutzeravatar
JannikV
Nerd
Nerd
Beiträge: 609
Registriert: 24. Apr 2011 12:42

Re: Theoretische Übung 2

Beitrag von JannikV »

Nein natürlich nicht in compress(). list muss erstmal initialisiert werden.
Dafür ist einfach der Konstruktor da. Beim vorgegebenen Coderahmen wurde das leider versäumt. Ich habe das bei mir einfach angepasst, aber ein offizielles Statement ob das erlaubt ist gab es noch nicht.
Für den Fall dass es nicht erlaubt ist kannst du eine add Methode schreiben die Elemente in die ArrayList einfügt. Und wenn list noch null muss add halt zuerst eine neue List erstellen. Das wäre nach dem Konstruktor der zweitlogigste (was ein Wort oO) Ort dafür.
Und bevor du compress benutzt muss im Test dann natürlich auch mal add benutzt worden sein.
Innerhalb von compress musst du nun aber unschönerweise auch noch abprüfen ob list null ist und compress ansonsten weiter ausführen.

VG

aileen
Erstie
Erstie
Beiträge: 20
Registriert: 26. Apr 2012 13:28

Re: Theoretische Übung 2

Beitrag von aileen »

Danke für deine Antwort, hätte ja auch garkeinen Sinn gemacht, list bei jedem Aufruf von comress neu zu initialisieren..
Ich habe meinen Fehler gefunden, ich hab wohl anscheinend aus Versehen java.util.List importiert, wenn ich das rausnehme funktioniert auch ListItem<KeyItem<T>> current = this.list.first;

Manuel
Neuling
Neuling
Beiträge: 1
Registriert: 28. Mär 2011 20:08

Re: Theoretische Übung 2

Beitrag von Manuel »

Ich habe auch noch eine Frage zu der ArrayList.
Ich versuche gerade mir eine Liste wie im Beispiel zusammenzubasteln. Hier ist mein Code dazu:

Code: Alles auswählen

ArrayList myarraylist = new ArrayList(3);
List<ListItem> mylist = new List<ListItem>();
		
Integer[] array1 = new Integer[3];
array1[0]=1;
Integer[] array2 = new Integer[3];
array2[0] = 2;
array2[1] = 3;
Integer[] array3 = new Integer[3];
array3[0] = 4;
		
KeyItem<Integer> key1 = new KeyItem<Integer>(array1, 1);
KeyItem<Integer> key2 = new KeyItem<Integer>(array2, 2);
KeyItem<Integer> key3 = new KeyItem<Integer>(array3, 1);
		
ListItem<KeyItem> Item1 = new ListItem<KeyItem>(key1, null);
ListItem<KeyItem> Item2 = new ListItem<KeyItem>(key2, null);
ListItem<KeyItem> Item3 = new ListItem<KeyItem>(key3, null);
		
Item1.next=Item2;
Item2.next=Item3;
		
mylist.first=Item1;
myarraylist.list = mylist;
Ich habe eigentlich gedacht, dass ich mir nun mit System.out.println(myarraylist.list.first.key.n) den Wert von n aus dem entsprechenden keyItem ausgeben lassen kann.
Leider funktioniert nur "myarraylist.list.first.key" und er zeigt mir "KeyItem@164f1d0d" an. Wieso kann er mir dann nicht noch n ausgeben?

Prof. Karsten Weihe
Dozentin/Dozent
Beiträge: 1824
Registriert: 21. Feb 2005 16:33

Re: Theoretische Übung 2

Beitrag von Prof. Karsten Weihe »

Manuel hat geschrieben:

Code: Alles auswählen

List<ListItem> mylist = new List<ListItem>();
Das habe ich heute schon einmal in einem persönlichen Gespräch gesehen - dieselbe Abweichung vom Übungsblatt, dasselbe Fehlverhalten, vielleicht kein Zufall.

Warum parametrisieren Sie List mit ListItem? Auf dem Übungsblatt wird List mit Schlüsseltyp T parametrisiert. Könnte das das Problem sein?

KW

sab
Mausschubser
Mausschubser
Beiträge: 97
Registriert: 28. Okt 2011 08:42

Re: Theoretische Übung 2

Beitrag von sab »

Hallo,

ich glaube ich stehe absolut auf dem Schlauch.
Ich glaube verstanden zu haben, dass ich direkt über die in den Listen gespeicherten Arrays iteriere. Meine Frage ist nun: Wie greife ich aber darauf zu? Ich glaube herausgelesen zu haben, dass ein Zugriff auf das Array über myArrayList.get(i) nicht erlaubt ist, weil ich wieder drüber iteriere. Wie komme ich also an das Array ran? Ich kann natürlich auch myArrayList.list.first.array und myArrayList.list.first.next.array machen, aber dann würde ich wieder über die Listenelemente iterieren.
Kann mir jemand noch einen Hinweis geben? Ich glaube ich verstehe die ganzen Winke mit dem Zaunpfahl meiner Vorposter nicht so wirklich..

Danke!

Benutzeravatar
JannikV
Nerd
Nerd
Beiträge: 609
Registriert: 24. Apr 2011 12:42

Re: Theoretische Übung 2

Beitrag von JannikV »

Erstmal greifst du dir das erste ListItem heraus und setzt eine int Variable auf 0 so dass die praktisch den Anfang dieses ersten Arrays markiert. Dann erhöhst du die immer weiter bis das Array zu ende ist. Dann wird die Variable auf das nächste ListItem gesetzt und es geht von vorne los.

Seldon
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 119
Registriert: 19. Apr 2012 18:12

Re: Theoretische Übung 2

Beitrag von Seldon »

Übungsblatt 2 hat geschrieben:[...] und es darf zusätzlich nur eine einzige Schleife verwendet werden. Diese Schleife soll nicht über die ListItems iterieren, sondern über die Elemente der abstrakten Sequenz.
Das "zusätzlich" verwirrt mich. Ist das im Sinne von "außerdem", also es gibt insgesamt nur eine Schleife, oder erlaubt es eine äußere Schleife die über die ListItems, und eine innere, die über die Arrays iteriert? Ich habe es jetzt mit letzterem gelöst, aber könnte es auch auf eine Schleife übertragen - wäre aber immer noch dieselbe Anzahl Elemente, über die iteriert wird.
JannikV hat geschrieben:Erstmal greifst du dir das erste ListItem heraus und setzt eine int Variable auf 0 so dass die praktisch den Anfang dieses ersten Arrays markiert.
Du musst nicht unbedingt bei 0 anfangen ;)

Antworten

Zurück zu „Archiv“