Liste verstehen...

Status
Nicht offen für weitere Antworten.

Assassin

Mitglied
Hallo,
ich habe versucht eine Aufgabe zum Thema 'Programmverständnis' zu bearbeiten,
aber habe leider keine Lösung zur Aufgabenstellung gefunden. -.-

Würde mich also freuen, wenn mir jmd. lediglich sagen könnte,
ob meine Lösung ansatzweise richtig ist.^^
Thx :)

Hier die Aufgabe, bzw. das gegebene Programmfragment:
Java:
class N {
int v;
N next;
N(int v) {
this.v = v;
}
}
...
int n = 7,
m = 4;
N t = new N(1),
x = t;
for (int i = 2; i <= n; i++)
x = (x.next = new N(i));
x.next = t;
System.out.print(x.v); // (*)
while (x != x.next) {
for (int i = 1; i < m; i++)
x = x.next;
System.out.print(" " + x.v);
x.next = x.next.next;
}

a) Was wird ausgegeben?

b) Wie viele Elemente besitzt die Liste in der Zeile(*)?

Hier meine Lösung:
a) Ungefährer Ablauf...(Hoffe, man versteht meine Gedanken :))
7 - 6 - 5 - 4 - 3 - 2 - 1

-> v bei (*): 7

7 - 6 - 5 - 1 - 1 - 1 - 1

Ausgabe: ( _ = Leerzeichen)

_ 7 _ 1 _ 1


b) 7
 

Marco13

Top Contributor
Ob ihr wirklich richtig steht, seht ihr, wenn ... also, hast du das ganze einfach mal compiliert und gestartet? (So eine Zeile wie
x.next = x.next.next;
in der Schleife sieht aber schon merkwürdig aus :autsch: Naja - sinnvoll soll es wohl gar nicht sein)
 

Assassin

Mitglied
Nein, habe ich bisher nicht.
War so gegeben und ist halt eher eine 'Pen and Paper' - Aufgabe.:)

Mhm, aber habe ich zumindest richtig in die Liste eingefügt? oO

Lg
 

Marco13

Top Contributor
Ja, aber um seine Gedankengänge zu verfizieren hilft's vielleicht. Ich hab's gerade mal gestartet... hat die fehlende Einrückung und die besch... Klammerung da irgendeinen Zweck, ausser dass der Leser "Oo *confused* oO" wird?! Wie auch immer. Die 7 stimmt noch ... der Ablauf danach ist halt übelst wirr, wegen der For-Schleife und dem "Löschen"... also, es kommt etwas anderes raus als "7 1 1"

EDIT: Das Einfügen stimmt wohl noch, aber das Löschen und das Endergebnis nicht
 

Assassin

Mitglied
Hallo... nochmal^^.
So, ich habe jetzt die Aufgabe ein wenig zerlegt und schreibe mal kurz meinen gedanklichen Ansatz auf...:)
Mein Problem ist bisher die while-Schleife und die Zeile mit dem x.next.next, aber ...

Liste nach dem Einfügen: 7 6 ... 1
v bei (*) : 7
und in die while-Schleife gehen, wo dann die for-Schleife 2x ausgeführt wird und die Liste sich entsprechend ändern sollte.
Liste: 6 5 ... 1
nach dem 2. Durchlauf: 5 4 ... 1

Wäre das bis dahin denn soweit okay? oO:oops:

Lg Assa
 

Marco13

Top Contributor
Wenn du sagst, dass die for-Schleife 2x ausgeführt wird, meinst du dann, dass sie 2 durchläufe macht, oder dass sie 2x komplett ausgeführt wird (also 2 mal soundsoviele Durchläufe macht)?

Hab jetzt auch mal Bleistift und Papier ausgepackt:
- Am Anfang ist x=7, und die Liste ist zikulär verkettet.
- Dann kommt die for-Schleife, die von 1 bis 3 läuft, d.h. in der for-Schleife wandert x von 7 nach 1 nach 2 nach 3.
- x wird ausgegeben (also die 3)
- Dann wird das nächste Element (also die 4) gelöscht
- Dann kommt die for-Schleife, die von 1 bis 3 läuft, d.h. in der for-Schleife wandert x von 3 nach 5 nach 6 nach 7.
- x wird ausgegeben (also die 7)
- Dann wird das nächste Element (also die 1) gelöscht
- Dann kommt die for-Schleife, die von 1 bis 3 läuft, d.h. in der for-Schleife wandert x von 3 nach 2 nach 3 nach 5.
- x wird ausgegeben (also die 5)
....
 

Assassin

Mitglied
Vielen Dank!
Ich meinte damit 2 Durchläufe in der for...Sry.

Soweit habe ich das Vorgehen jetzt wohl verstanden, nur eine Frage bleibt immer noch offen... :oops:

Wir befinden uns ja in der for-Schleife, welche in der while-Schleife ausgefürht wird und das, solange bis x ungleich x.next ist. Das Ungleich irritiert mich iwie...

Ist die Ausgabe dann (nach dreimaligen Druchlaufen der for) 3_7_5 oder (nach häufigerem Druchlaufen, bis die Liste quasi leer ist) 3_7_5_3_3_2 ?

Lg Assa:)
 

Marco13

Top Contributor
Letzeres - ich habe das Programm zwar gerade nicht hier, aber ich meine, das wäre die Ausgabe gewesen. Die Beschreibung war schon fast richtig: Die while-Schleife bewirkt, dass
- mit der for-Schleife 3 Schritte im Kreis gelaufen
- das nächste Element gelöscht
wird, bis die Liste nur noch ein Element enthält.
 

Assassin

Mitglied
Okay,
dann war ich ja immerhin auf dem richtigen Weg und nicht komplett 'verpeilt'...^^

Nochmal vielen Dank für deine Hilfe!:applaus:
Lg Assa
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben