PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java Warteschlange Hilfe



haggys22
23.10.2010, 07:39
Hallo,
ich habe folgendes Problem:
Wir haben in der Schule eine Warteschlange programmieren sollen, was ich auch geschafft habe, und nun will ich auch noch eine "up" und eine "down" Methode, mit der ich die Wartenden in der Schlange nach oben und unten verschieben kann.
Den Code könnt ihr euch hier (http://www.mydrive.ch/) mit den Benutzerdaten "Gast@Haggi94:free-hack" und dann in dem Ordner free-hack.com den Ordner Warteschlange dl'en.
Wär nett wenn mir jemand helfen könnte :D

lg
haggys22

BTW: ich benutze BlueJ wenns wichtig sein sollte.

100
23.10.2010, 12:29
Wieso macht jede Schule dasselbe -.-

Code hier rein oder hier (http://nopaste.free-hack.com/) rein dann helfe ich dir.

Wie wärs mit deinen Überlegungen?
Welche Ansätze hattest du?
Oder hast du überhaupt keine Idee?
Fehlt dir das Konzept oder das Wissen deine Idee umzusetzen?

robbys22
23.10.2010, 12:31
Weil es im Lehrplan steht?^^

100
23.10.2010, 12:33
Ist doch total langweilig und ätzend dass jeder mit BlueJ arbeiten muss :(
Traurig dass alles vorgegeben wird.. als wäre es nicht schlimm genug mit Java zu arbeiten^^

haggys22
23.10.2010, 12:45
naja nen Ansatz hätte ich ja, bloß keine Idee, wie ich das ganze umsetzen kann.
Also für die "up"-Methode jetzt mal mein bisheriger Ansatz:
FrEe-hAcK.com :: NoPaste (http://nopaste.free-hack.com/index.php?id=5a2777eda6)
und für die "down" Methode wärs anders rum aber so funzt das ganze eben nicht

blackberry
23.10.2010, 12:46
Die Informatikbücher sehen sowieso immer aus wie ein Bilderbuch für 3-Jährige und was den Stoff betrifft, so sollte man da maximal 1-2 Monate mit beschäftigt sein um das Buch durch zunehmen...

Naja back2topic:
Der Login zu der Seite funktioniert nicht - entweder du postest den Scheiß hier (http://pastie.org/l/java), oder irgendwo anders, wo man auch drauf zugreifen kann.
EDIT:
^---- zu spät.

100
23.10.2010, 12:52
Also die Warteschlange baut sich von oben nach unten auf.
0 A
1 B
2 C
3 D
4 E

Wenn der Knoten D (an Stelle 3) nun nach unten soll (also in der Warteschlange nach hinten, hoffe das ist richtig), dann musst du den Nachfolger von C zu E (aktuell der Nachfolger von D) machen, und den Nachfolger von E zu D. Dann wird daraus:

0 A
1 B
2 C
3 E
4 D

Was ich aber gerade nicht verstehe sind deine Knoten als Arrays oder wie? Theoretisch war das Prinzip der Nachfolgerkacke doch, dass die Liste bloß dadurch entsteht, dass jeder Knoten einen Nachfolger hat. Die Knoten kennen sich nicht untereinander, sondern nur ihren Nachfolger (und vielleicht noch ihren Vorgänger, was hier wichtig wäre wenn du es nicht umständlich machen willst).

haggys22
23.10.2010, 13:04
Also wegen MyDrive - Ihr kostenloser Online-Speicher (http://www.mydrive.ch) ich hab beim PW des "-"-Zeichen vergessen des PW lautet als "freehack".
Die Knoten sind nicht als Arrays gespeichert, aber ich habe eine Methode mit der ich die Knoten der Reihe nach als Array ausgeben kann, um mir Arbeit zu sparen wenn ich einen Knoten an einer bestimmten Stelle haben will. aber ansonsten stimmt es, dass jeder Knoten genau einen Nachfolger hat und sonst keine Verknüpfungen.
aber wenn ich das ganze eben so mache, wie ich im NoPaste gepostet habe, kennt ja der Vorgänger vom Knoten a nur den Knoten, dessen Attribute der Knoten a übernommen hat, aber nicht den Knoten a an sich. Also ist das Problem, dass sich dabei in meinen Augen die Struktur dadurch in Luft auflöst, und man dann 2 Ketten hat, und ein paar freie Radikale

100
23.10.2010, 13:08
Habt ihr das so gelernt? Sonst ist es eigentlich eine Vergewaltigung der vorgegebenen Datenstruktur.. du könntest deinen Knoten insoweit erweitern, als dass er seinen Vorgänger kennt. Dann hast du alle benötigten Verknüpfungen um sowohl deine bereits vorhandene "nach vorne" Methode, als auch meine dir oben theoretisch dargestellte "nach hinten" Methode zu realisieren. Ich hoffe du kriegst das selber hin, denn ich versuche nur zu helfen, aber mache nicht deine Arbeit. Über deinen letzten Part hab ich mir jetzt keine Gedanken gemacht, denn wenn du nach vorne und hinten springen kannst, dann solltest du mein Vorhaben ohne Probleme durchführen können. Natürlich müssten auch immer Ausnahmen beachtet werden, für den Fall dass es keinen Nachfolger oder Vorgänger mehr gibt.

/edit
Also ich bin jetzt erstmal ein paar Stunden weg, wenn du es geschafft hast editier es hier bitte irgendwo rein. Sonst versuchen wir es nochmal später bzw. heue Abend. Wenn ich micht nicht gerade selber irre, dann ist das aber die beste Möglichkeit.

dimebag_darrell
23.10.2010, 15:36
Mal eben zum verstehen, vielleicht kann ich dir auch helfen. Haben im LK natürlich die selben Abstrakten Datentypen gemacht.

Bei welcher Schlange seid ihr im Moment?
Macht ihr noch die "Queue" mit Nachfolger?
Oder macht ihr vielleicht schon eine andere generische Schlange mit Vorgänger und Nachfolger bzw vielleicht schon den ADT "List"?

Nehme aber an, dass ihr bei der Queue seid.

Also wir haben uns auch langsam an die Queue rangetastet, mit mehreren Verbesserungen und Optimierungen unser ersten Überlegungen, was das Ding können muss/sollte.

Unser Endprodukt war dann eine Klasse "Queue" mit der inneren Klasse "Knoten".

Ich füg den Code mal bei Pastebin ein: http://pastebin.com/XVe3eJLh

Die Methodennamen sind sogar schon nach den Zentralabi Vorgaben ;)
Wenn du was daran lernen willst, vollzieh den Code erst nach, bevor du ihn einfach benutzt.

Die Schlange kann alles verwalten, wegen "private Object kenntObject;", is ja klar. Kann man natürlich auch beschränken.
War wiegesagt unser Endprodukt.

Wenn man sich noch Gedanken macht, wie es einfacher geht, kommt man auf die beste Möglichkeit, nämlich die "List".
Kannste dir ja auch mal angucken: http://pastebin.com/75xffiZR
Natürlich auch nach Zentralabivorgaben.

Die List hat den Vorteil, dass es start und ende als Knoten gibt. Daraus folgt, dass man einen Runner benutzen kann. Dieser hat die Funktion eines Zeigers und steht immer über einem "richtigen" Knoten in der Verkettung. Jeder Knoten kennt seinen Vorgänger und Nachfolger. Dadurch ist es möglich Knoten zu ersetzen, zu löschen oder neue irgentwo einzufügen. Das wiederrum, wird dadurch leichter, dass es sich leichter realisieren lässt einen Knoten nach vorne oder nach hinten zu rutschen (mit dem Runner).

Sehe grade zwar, dass die List nicht komplett ist weil insertInFront und insertBehind nicht da sind, aber das ist eigentlich auch egal... Kann man auch selber machen, ist sehr leicht. Der Inhalt eines Knoten ist in der Klasse mit Value ausgefüllt.

Hoffe ich konnte dir helfen und dir nen Ausblick darauf geben, was sicherlich als nächstes ansteht :lol
Ich teile übrigens dein Schicksal, wir programmieren selbst im 12er LK ab und zu noch mit BlueJ, zum Kotzen dieses verbuggte Scheißprogramm.

haggys22
23.10.2010, 16:09
Also bin mit der "up"-Methode fertig: http://pastebin.com/P61Cjeu8
Aber ich kann den letzten Knoten nicht nach oben verschieben...
ist zwar n bisschen kompliziert geschrieben (also nicht dass mans nicht verstehen würde aber es gibt bestimmt ne elegantere Lösung^^) aber wär nett wenn mal einer nach dem Fehler schauen könnte^^
So die "down"-Methode war auch ganz einfach^^ einfach die "up"-Methode für den Knoten unter dem nach unten zu verschiebenden Knoten aufrufen, bloß jetzt kann man natülich auch nicht den vorletzten Knoten nach unten verschieben

100
23.10.2010, 17:43
Ich bin immernoch der festen Überzeugung dass es falsch ist was du tust..
1. Geht es um diese abstrakte Liste (Bla kennt seinen Nachfolger) und wenn ihr damit arbeiten sollt, dann ist es bescheuert, wenn du im Endeffekt die ganzen Daten nochmal in eine andere Liste schreibst
2. Ist es unnötige Rechnerei, wenn das Programm mit allen Daten zwei mal rechnen muss. Du nimmst quasi die Datenstruktur A (mit der ihr eigentlich arbeiten sollt) und erstellst daraus die völlig andere Datenstruktur B. Dadurch wird die Datenstrukut A, mit der ihr eigentlich arbeiteten solltet, absolut nutzlos wenn nicht sogar überflüssig. Unnötige Rechnerei und wie gesagt alles doppelt.. ich kann mir nicht vorstellen, dass das die Lösung ist. Unser Lehrer hätte das garantiert nicht akzeptiert.

Schon dein Ansatz ist falsch.. bei deiner Datenstruktur hast du keinen Index, durch den du ein Element zuordnen könntest. Du hast bloß das Element an sich (also den Knoten). Du SOLLST (davon gehe ich mal aus, schließlich sollt ihr etwas bzgl. der Datenstruktur lerbeb) einen KNOTEN nach vorne oder nach hinten schieben, und zwar anhand dieses Knotens, da ein Knoten an sich keine Zahl hat. Du hast den Sinn dieser Datenstruktur offensichtlich nicht verstanden.. oder ich verstehe ich nicht, was euer Lehrer da mit euch vor hat :(

dimebag_darrell
23.10.2010, 18:23
Also bin mit der "up"-Methode fertig: http://pastebin.com/P61Cjeu8
Aber ich kann den letzten Knoten nicht nach oben verschieben...
ist zwar n bisschen kompliziert geschrieben (also nicht dass mans nicht verstehen würde aber es gibt bestimmt ne elegantere Lösung^^) aber wär nett wenn mal einer nach dem Fehler schauen könnte^^
So die "down"-Methode war auch ganz einfach^^ einfach die "up"-Methode für den Knoten unter dem nach unten zu verschiebenden Knoten aufrufen, bloß jetzt kann man natülich auch nicht den vorletzten Knoten nach unten verschieben


WTF!
Ich weiß nicht wie du daraus ne Warteschlange (Queue) bauen willst. Schau dir doch mal meine vorgeschlangene an... bitte :D
Vergleiche mal....

haggys22
23.10.2010, 19:03
Ich hab mir das ganze schon angeschaut und das ganze ist vom Aufbau mehr oder weniger ähnlich. Ich kann ja mal den gesamten Code uppen...
http://pastebin.com/G7MrSi0S

100
23.10.2010, 19:06
Ich werde ignoriert.. naja gut ist deine Sache :rolleyes:

Shadowstyle
23.10.2010, 19:08
@haggys22 (http://free-hack.com/member.php?u=71200)
In eurer Arbeit schreibt ihr bestimmt über Bäume und eine Zyklische Warteschlange :rolleyes:
kleiner Tipp :D

robbys22
23.10.2010, 19:12
haggys und mein Lehrer hat das gar nicht aufgegeben^^

Er will die Warteschlange anscheinend nur ein bisschen erweitern, weil das was vom Lehrer vorgegeben viel zu low ist.

haggys22
23.10.2010, 19:36
@100: wenn du mit dem ignorieren meinst, dass ich nix zum Thema Vorgänger gepostet hab, dann liegt das daran, dass ich das ganze a) für eine weitere Fehlerquelle halte und b) weil dimebag_darrell bereits eine mir besser vorkommende Empfehlung gegeben hat.
Also nicht perönlich nehmen ;P
@robbys: (Y)
@Shadowstyle: Wie meinen? xD

100
23.10.2010, 19:38
Ich habe begründet wieso deine Lösung nicht eurem Thema entsprechend ist, und wieso ich als Lehrer sagen würde "Wiederhol alles was wir die letzten Stunden gemacht haben" weil du es offensichtlich nicht verstanden hast.

Aber wie gesagt.. deine Sache :-)

haggys22
23.10.2010, 19:43
Achso das meinst du... OK
Ich habe die Aufgabenstellung sehr wohl verstanden, jedoch ist mir das ganze zu low, und das mit dem Verschieben war NICHT Teil der Aufgabenstellung, wie robbys schon erwähnt hat^^
Nun ja, wir haben letzte Stunde die grafische Benutzeroberfläche erstellt^^ und ich wollte eben eine Liste mit allen Knoten, und nicht, dass, wie die Aufgabenstellung eigentlich war, nur der nächste Knoten und die Anzahl an Knoten angezeigt wird ;P

100
23.10.2010, 20:13
Ändert nichts daran dass das was du gemacht hast im Bezug auf euer Thema schlecht & falsch ist^^

haggys22
23.10.2010, 20:37
Das ändert auch nix daran, dass ich trotzdem noch nen zu behebenden Fehler drin hab... es kann dir doch egal sein ob das der Arbeitsauftrag war, also brauchen wir doch nicht hier rumzudiskutieren, ob, und wenn, wie sinnvoll/gut/richtig oder sonstwas das ganze ist.
Hätte ich am Anfang nicht gesagt dass wir das in der Schule machen, dann hättest du wahrscheinlich auch nicht damit angefangen...

100
23.10.2010, 20:54
Es ging um Hilfe und ich bin davon ausgegangen, dass du deinen Lehrer beeindrucken willst, oder ihm irgendwie zeigen willst was du kannst. Damit tust du genau das Gegenteil, darum ging es mir.

Natürlich ist MIR das egal (habe ich auch mehrmals gesagt) aber es geht hier ja um dich wann auch immer du das vorstellen willst.

/edit
So ich schau mir jetzt mal deinen Code an.

1. Fängt n bei 0 an oder nicht?
Z. 149 nochmal angucken dann: if(n >= 2 && n < getAnzahl()){
Wenn du 2 nimmst fängst du bei 1 an (oder?) dann müsstest du <= getAnzahl sagen, weil du den letzten ja trotzdem vorziehen kannst

Dann macht es Sinn geeignet Namen für die Variablen zu nehmen.
Für mich ergibt sich für das Vorziehen dann:

pos = n;
vor = n-1;
vor2 = n-2;
nach = n+1;

0 A vor2
1 B vor
2 C pos (<- n=2)
3 D nach
4 E

Nachfolger von C (pos) = B (vor)
Nachfolger von B (vor) = D (nach)
Nachfolger von A (vor2) = C (pos)

/=>

pos.setNf(vor);
vor.setNf(nach);
vor2.setNf(pos)

0 A
1 C
2 B
3 D
4 E


Und für das Nach-Hinten-Stellen:

0 A
1 B vor
2 C pos (<- n=2 // soll einen nach hinten)
3 D nach
4 E nach2

Nachfolger von B (vor) = D (nach)
Nachfolger von D (nach) = C (pos)
Nachfolger von C (pos) = E (nach2)


0 A
1 B
2 D
3 C
4 E

So das solltest du hinkriegen.
Und dann fehlen halt noch die Ausnahmen.. man kann ja auch den zweiten nach vorne schieben, auch wenn es kein vor2 mehr gibt zb.

dimebag_darrell
23.10.2010, 21:21
Das mit den Variablen ist ja theoretisch egal. Trotzdem schadet es nicht, wenn man versteht was was ist (einfacher...).

Ich wunder mich irgentwie, dass ihr keine Vorgaben bekommt was Variablen angeht :surprised

haggys22
23.10.2010, 21:33
@100: nein, ich möchte nicht meinen Lehrer beeindrucken, sondern einfach die Projekte aus der Schule verbessern, bzw. so verändern, dass es mir besser gefällt.
und @dimebag_darrell: wir haben in der Schule noch nie Vorgaben bei Klassen/Methoden/Variablen/Attribut-Namen, und in diesem Fall erst recht nicht, da das mit dem Verschieben meine eigene Kreation ist.

dimebag_darrell
24.10.2010, 10:13
In welcher Stufe bist du denn bzw als was hast du Informatik gewählt? Grundkurs? Leistungskurs? oder biste noch Klasse 10 oder darunter?

Würde mich interessieren.

haggys22
24.10.2010, 16:53
Ich bin gerade in der Q11 und habe Informatik mit "S"-Belegung gewählt. Im G8 gibt es keinen "Grundkurs" und "Leistungskurs" mehr, sondern eine "A"-, "X"-, "S"-, oder "C"-Belegung. "A" heißt 2/4 Semester, "X" heißt 4/4 Semester, "S" heißt 4/4 mit schriftl. Abi, und "C" ist 4/4 mit mündl. Abitur

dimebag_darrell
24.10.2010, 17:15
Alter... da bleibt mir die Spucke weg. Scheiß G8... naja :confused: komisch trotzdem :)

blackberry
24.10.2010, 18:16
Was mögt ihr am G8 denn nicht? Ich finds klasse!

PS.: Off-Topic detected D:

robbys22
24.10.2010, 18:22
naja der Lehrplan ist halt sehr voll, es gibt viel zu Lernen und wir haben fast jeden Tag Nachmittags Unterricht. Aber dafür sind wir ja auch ein Jahr früher fertig ;)

Vlt sollte man mal ein G8-Diskussions-Thread aufmachen?^^