Aufgabe 10.6

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Aufgabe 10.6
Hat sich diese Aufgabe schon mal jemand angeschaut?
Ich verstehe die Logik des Interfaces nicht ganz:
Wenn ich doch ne neue Warteschlange erschaffe, dann sind keine Elemente enthalten -->Kopf-Element ist null.
Bei der Methode enqueue(…) steht jetzt im Interface dabei, dass sie eine NSE-Exception werfen soll, wenn die Schlange leer ist.
Wie soll man denn dann Elemente in die Schlange bringen, ausser über enqueue all (und dazu bräuchte man eine bereits bestehende Schlange)?
Für mich wäre logischer: Leere Schlange → enqueue(…) → Schlange ist nicht mehr leer, sondern der Kopf ist nun das mit enqueue angefügte Element…
Bitte um Aufklärung. =) thx


Ja hoffentlich nimmt sich der Marc nich einfach frei über Weihnachten, sondern schaut hier schön brav täglich vorbei… Gibt bestimmt wieder einige Unklarheiten :wink:


Ach blöder Copy’n’Past Fehler bei den Komentaren…

Die Signatur zählt, ich stell aber gelich nochmal ein neues interface online.

Und jein, ich nehme mir nicht frei, werde schon immer wieder mal vorbei schauen. Aber bestimmt nicht im Stunden takt weil auch meine Familie will mich über Weihnachten sehen :wink:


juhu, merci… so klingt das schon ein bisschen logischer :wink: =)
Viel spass mit der übung… die ist ja echt ganz machbar, ausnahmsweise … :slight_smile: :o) ← tatsächlich eher ein Weihnachtsgeschenk als ein ürgswrgPfrmpff-Zusatzkackmist :smiley:


jaja einfach mal frei haben , das wär schon schön gewesen…


das hast doch die 20jahre davor gehabt!1


Solang du auch schön drauf achtest, alle Zeiger konsistent zu halten :slight_smile:

Naja gibt sicherlich viele Möglichkeiten das zu lösen, und jenachdem wie und wann man sortiert vereinfacht / erschwert sich vieles.


Frage:

Müsste es im Interface bei dequeue statt:

nicht eher:

heißen?
Also funktionieren tuts mit beidem, aber bei ersterem bekomm ich halt noch warnings wegen unsave operations, das find ich nicht so schön.

Zumal auch sonst im ganzen Interface immer alles mit signiert ist, geh ich mal davon aus dass es auch in dequeue() so sein müsste?! Dann wäre auch das ätzende warning weg.


hallo,
bei der ersten methode die wir implementieren sollen, ist gefordert, dass ein neues Element eingefügt wird…
ich dachte mir, dass ist mit einer whileschleife gut realisierbar, etwa

while(neusElement.prioritaet() < "nächstesElement.prioritaet()) {
blablabla
}

Um an das nexte Element zu kommen dachte ich z.b. an IndexOf() oder get().
nun meine Frage/Problem. Wenn ich diesen Code meinem Kompiler zum Essen vorsetze, kotzt er mir idR immer das gleiche aus, nämlich

cannot find symbol
symbol: method IndexOf() bzw. get()
location: class Schlange

ich hab LinkedList importiert und auch Iterator und frage mich nun ob das überhaupt gehen kann…

genau schaut meine while schleife wie folgt aus

while(neuElement.prioritaet() < next().prioritaet() ) {
oder
while(neuElement.prioritaet() < get(i).prioritaet() ) { // i soll der jeweilige Index sein

sieht jmd meinen Fehler bzw kann mich in die richtige richtung schubsen?

merci im vorraus


naja um methoden einer linked list verwenden zu können, musst du erstmal ein konkretes Objekt erzeugen von LinkedList, also sowas wie: LinkedList liste = new LinkedList(), oder du implementierst dir die Methoden IndexOf und get, weil er findet sie ja nicht in deiner Klasse.

Weiterhin glaub ich dass du grad nen relativ steinigen Weg gehst, wenn auch die Idee gleich beim Einfügen zu sortieren gut ist :wink: das erleichtert später einiges (bei front() dequeue() usw.). Hab ich auch gemacht gleich beim Einfügen zu sortieren.


vielen dank :wink:


[code]

[/code]tag zusammen:
in unserem skript heißt es zu inneren klassen (anonyme) untera nderem:

public Iterator<E> iterator() {
     return new Iterator<E>() {
            int currentIdx = 0;
            Entry currentElement = header;
            public boolean hasNext() {
                   return (currentIdx < size);
           }
           public E next() {
                 currentElement = currentElement.next;
                  if (currentIdx < size) {
                          currentIdx++;
                          return currentElement.element;
                 } else {
                          return null;
                 }
           }
           public void remove() { ... }
     };
}

gut, ich denke so ähnlich wird mein iterator zu der aufgabe auch aussehen. hab ihn auch so ähnlich gebaut, nur hab ich jetzt ein problem. wie ruf in den in der main auf? wenn ich eingebe:

Warteschlange<Integer> w = new Warteschlange<Integer>();
	w.enqueue(325, 123);
	w.enqueue(18, 34);
	w.enqueue(-12, 123);
	w.enqueue(21, 55);
	
	System.out.println(w.iterator().next().wert()); 
	System.out.println(w.iterator().next().wert());
	System.out.println(w.iterator().next().wert());
	System.out.println(w.iterator().next().wert());

bekomme ich 4 mal den selben wert (in dem fall 325). ich denke ich amch einen fehler beim aufrufen in der main. ansonsten versteh ich den teil aus dem skript nicht, wo steht:

Entry currentElement = header;

und das steht innerhalb der anonymen inneren klasse. also weißt er es ja bei jedem aufruf (so auch bei mir) dem header, bzw. kopf zu (bei mir wärs zwar das ende, aber lassen wir das mal beiseite). und dann kann es gar keine anderen werte ausgeben.

ich hoffe es kann mir jemand weiterhelfen und bedanke mich im voraus.


Versuchs mal mit

Iterator<PriorisiertesElement<Integer>> it = w.iterator(); System.out.println(it.next().wert());

Bei deiner Version bekommst du jedes Mal einen neuen Iterator, der natürlich als next() den head zurückgibt.


wow, tausend dank für deine promte antwort, war mir nämlich sicher dass der fehler in der main lag und nciht im iterator… impressive, (perfect, gauntlet, accuracy, frags :slight_smile: ) danke nochmal


Das mit dem Headerelement ist so ne Schönheitssache, diverse Methoden lassen sich um einiges leichter implementieren wenn man ein headerlemement verwendet (man bekommt dann eine zyklische Liste und bleibt von nervigen NullPointerExceptions verschont)

Bereich des Prioritäts-Integer
Servus Leute!

Kann man eigentlich davon ausgehen, dass die übergebenen Integer für die Priorität positiv sind?
Und was hat hohe Prio? Kleiner Zahlenwert oder großer?

Gruß Matthias


Sollte keine Rolle spielen, ob die Prioritäten auch negativ sein können.
Große Zahl <=> hohe Priorität ist schon sehr naheliegend.


ja genau, das würde mich auch mal interessieren, ich habs übrigens so verstanden dass große integer hohe priorität haben…


Öhm, was willst du bei der Aufgabe mit einer zyklischen Liste? Das erschwert die Sache doch viel mehr.