Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hi, die Aufgabe ist eine vorgegebene Zahlenreihenfolge in eine Queue zu packen und diese dann mit einem Stack anders herum ausgeben. Dies am besten in BlueJ. Peter ist übrigens die Reihenfolge
du popst ein element von der q und steckst das element in den stack
wenn du durch bist popst du alle elemente vom stack und gibst sie aus
bei der q
A B C D E
dann wird der stack so aufgebaut
A -> B -> C -> D -> E
beim stack wird das letzte element gepoppt also dann ist die Ausgabe
E -> D -> C -> B -> A
du popst ein element von der q und steckst das element in den stack
wenn du durch bist popst du alle elemente vom stack und gibst sie aus
bei der q
A B C D E
dann wird der stack so aufgebaut
A -> B -> C -> D -> E
beim stack wird das letzte element gepoppt also dann ist die Ausgabe
E -> D -> C -> B -> A
pop liefert dir bei einem normalen stack das oberste element und entfernt es aus dem stack ( was es bei dir nicht tut )
push fügt dem stack einen node hinzu
das sind die einzigen zwei methoden die ein stack braucht und die einzigen die du für die aufgabe brauchst
bei der queue ist das selbe halt nur in queue style
und dann hast du eine for schleife die einmal durchlatscht mehr ist es nicht die anleitung habe ich dir geschrieben
Also wie Mart schon sagt, die Stack und Queue Klassen sind ein bisschen merkwürdig, weil die anscheinend zwei Aufrufe brauchen, um ein Objekt auszulesen und danach zu entfernen. Aber ok, kann sein, dass das von dem Aufgabenersteller absichtlich so gemacht wurde, um zu prüfen, ob man auch aufpasst.
Wenn ich das richtig überblicke muss dein Programm dann also folgende Schritte tun:
1. Dein Queue füllen mit der "enqueue" Funktion
2.1. Erstes Objekt aus dem Queue holen und daraus entfernen mit "front" und "dequeue"
2.2. Dieses Objekt in dein Stack einfügen mit "push"
3.1. Das erste Objekt aus dem Stack holen und daraus entfernen mit "top" und "pop"
3.2 Dieses Objekt ausgeben
@BroKeineAhnung Wir machen hier keine Hausaufgaben für dich, aber das Vorgehen ist denkbar einfach. A) Eine Stack-Klasse erstellen, B) alle Elemente auf den Stack legen, C) alle Elemente vom Stack nehmen und jeweils ausgeben. Ein Stack folgt dem FILO-Prinzip bzw. LIFO-Prinzip (last come, first served), das bewirkt eine Umkehrung der Eingabedatenfolge. Noch Fragen?
ja gut aber die Erklärung bringt mir nicht viel, wenn ich das was ihr alle gesagt habt schon weiß, nur halt nicht weiß, wie ich das in BlueJ umsetzen kann.
ja gut aber die Erklärung bringt mir nicht viel, wenn ich das was ihr alle gesagt habt schon weiß, nur halt nicht weiß, wie ich das in BlueJ umsetzen kann.
Ist das mein Problem, wenn du im Unterricht nicht aufgepasst hast? Ich wiederhole mich gerne nochmal: Hier wird niemand deine Hausaufgaben für dich machen.
Ist das mein Problem, wenn du im Unterricht nicht aufgepasst hast? Ich wiederhole mich gerne nochmal: Hier wird niemand deine Hausaufgaben für dich machen.
Nein, das ist natürlich nicht dein Problem. Lange Rede, Kurzer Sinn es gab zwei Kurse im letzten Jahr, der eine hat mehr gemacht als der andere und jetzt wird von dem „schlechterem“ Kurs erwartet trotzdem alles zu können wie der andere Kurs. Also hat das hier nichts mit nicht aufpassen zu tun. Außerdem frage ich hier ja nicht nach einer kompletten Lösung sondern nach Lösungsansätzen die mir beim selbstlösen weiterhelfen könnten.
Wenn ich das richtig überblicke muss dein Programm dann also folgende Schritte tun:
1. Dein Queue füllen mit der "enqueue" Funktion
2.1. Erstes Objekt aus dem Queue holen und daraus entfernen mit "front" und "dequeue"
2.2. Dieses Objekt in dein Stack einfügen mit "push"
3.1. Das erste Objekt aus dem Stack holen und daraus entfernen mit "top" und "pop"
3.2 Dieses Objekt ausgeben
Kannst Du damit schon etwas anfangen? Und kannst Du es weiter verfeinern?
Den das Problem, das ich bei uns sehe ist jetzt einfach, dass wir nicht sehen, woran es scheitert. Fertigen Code wollen wir aber nicht liefern. Daher muss etwas mehr von Dir kommen, damit wir erkennen können, woran es denn scheitert / wo die Probleme sind.
Nein, das ist natürlich nicht dein Problem. Lange Rede, Kurzer Sinn es gab zwei Kurse im letzten Jahr, der eine hat mehr gemacht als der andere und jetzt wird von dem „schlechterem“ Kurs erwartet trotzdem alles zu können wie der andere Kurs. Also hat das hier nichts mit nicht aufpassen zu tun. Außerdem frage ich hier ja nicht nach einer kompletten Lösung sondern nach Lösungsansätzen die mir beim selbstlösen weiterhelfen könnten.
Ich benutze kein BlueJ, aber ich könnte mir vorstellen, dass es dort auch so etwas wie:
Project new
Class new
Run
gibt.
Das musst Du erst mal beherrschen.
In Deiner Datei Peter.java hast Du java.lang.Integer klein geschrieben.
Das ist falsch, das sollte BlueJ auch als falsch anmerken.
Zum Starten solltest Du Dir eine Klasse mit main-Methode anlegen.
Die kannst Du dann starten.
Ich schlage Dir das übliche "Hallo Welt" vor:
[CODE lang="java" title="Klasse mit main-Methode"]package ???; // schau mal, ob Du das Standard-Package (Wurzel-Verzeichnis) verwendest oder ein echtes
while (!queue.isEmpty()) {
stack.push(queue.remove());
gibt es das remove ja nicht in der Klasse Queue. Kann ich dann in der Klammer bei (queue.remove()); solange dequeue() durchlaufen lassen mit einer Schleife, bis die Queue wirklich removed bzw. leer ist oder wie würde man das sonst machen?
Ich benutze kein BlueJ, aber ich könnte mir vorstellen, dass es dort auch so etwas wie:
Project new
Class new
Run
gibt.
Das musst Du erst mal beherrschen.
In Deiner Datei Peter.java hast Du java.lang.Integer klein geschrieben.
Das ist falsch, das sollte BlueJ auch als falsch anmerken.
Zum Starten solltest Du Dir eine Klasse mit main-Methode anlegen.
Die kannst Du dann starten.
Ich schlage Dir das übliche "Hallo Welt" vor:
[CODE lang="java" title="Klasse mit main-Methode"]package ???; // schau mal, ob Du das Standard-Package (Wurzel-Verzeichnis) verwendest oder ein echtes
So, das ist jetzt was ich habe mit Hilfe von eineNick's Code:
public class Zahlenfolge
{
private Queue warteschlange;
int i = 5;
Integer Zahlenfolge = new Integer(i);
public Zahlenfolge()
{
warteschlange = new Queue <Zahlenfolge>();
int[] zahlenfolge = { 10, 4, 6, 8, 1, 3, 2};
}
public void ausgabeZahlenfolge(){
Queue<Character> queue = new Queue<Zahlenfolge>();
Deque<Character> stack = new Queue<Zahlenfolge>();
for (char c : String.toCharArray()) {
queue.add(c);
}
while (!queue.isEmpty()) {
stack.push(queue.remove());
}
while (!stack.isEmpty()) {
System.out.print(stack.pop());
}
System.out.println();
}
Es wird gesagt, dass ich Queue<Zahlenfolge>() nicht in Queue<java.lang.Character> konvertieren kann. Muss ich irgendetwas anderes in die <> setzen oder was wäre sonst das Problem?
2.
Deque<Character> stack = new Queue<Zahlenfolge>();
Es wird gesagt, dass Deque nicht existiert und wenn ich das dann durch java.util.Deque ersetze kommt dasselbe wie beim ersten Problem. Eigentlich genau due gleiche Frage wie bei 1.
Muss ich irgendetwas anderes in die <> setzen oder was wäre sonst das Problem?
3. + 4.
for (char c : String.toCharArray()) {
queue.add(c);
3. Wenn ich "wort.toCharArray() zu String.toCharArray() umschreibe, steht dort irgendetwas mit einer statischen Methode. Aber "wort" ist j auch nicht richtig und ich weiß sonst nicht was dort hinkommen könnte.
4. Joa, die Methode add existiert natürlich nicht, nur wüsste ich nichts anderes was dort hinkommen könnte. Muss ich dann eine neue Methode "add" erstellen?
5.
while (!queue.isEmpty()) {
stack.push(queue.remove());
Das Gleiche wie bei der 4. remove existiert nicht und ich wüsste sonst nicht was ich anders machen könnte um die Sachen aus der Methode zu entfernen. Muss ich dann eine neue Methode "remove" erstellen?
String wort = "Peter";
for (char c : wort.toCharArray()) {
queue.add(c); }
4.
Java:
while (!queue.isEmpty()) {
stack.push(queue.remove());
die fehler die hier kommen passieren weil du die sachen oben nicht hast deswegen meckert es dir das an
da das abitur prüfungs unterlagen sind von der beschreibung her, kapier ich nicht warum ihr
1. überhaupt mit Generics hantiert das ist Schwachsinnig so früh damit anzufangen
2. wenn der Code von deinem Lehrer ist von dem Stack und der Queue dann ist das sehr fragwürdig da der code entweder
-> einfach nur schrecklich ist
-> schrecklich gemacht wurde um euch zu prüfen :: jedoch ist das meines erachtens eher kontra produktiv
Alles klar. Ich danke allen hier für die Hilfsbereitschaft und schnelle Beantwortung von Fragen. Ich habe den Code jetzt leider nicht fertig bekommen, da ich jetzt c:a. 2 Stunden an 20 Zeilen Code gesessen habe, der ja nicht mal von mir war. Trotzdem noch eine schöne Woche
Alles klar. Ich danke allen hier für die Hilfsbereitschaft und schnelle Beantwortung von Fragen. Ich habe den Code jetzt leider nicht fertig bekommen, da ich jetzt c:a. 2 Stunden an 20 Zeilen Code gesessen habe, der ja nicht mal von mir war. Trotzdem noch eine schöne Woche
pop vom stack her ist schlichtweg falsch implementiert bzw mit absicht nicht so gemacht dass es umständlich ist ... fertig aus... bei pop wirfst du das oberste elmeent aus dem stack und gibst es zurück das gehört so und ist auch so... ka was er da wollte
Das ist zwar ein bisschen Offtopic, aber wenn ich mal so direkt fragen darf:
Was machst du eigentlich grade und woher hast du die Aufgabenstellung?
Es sieht ja ja so aus, als wäre das vor ein paar Jahren mal eine Abituraufgabe gewesen, die ihr jetzt zur Übung als Hausaufgabe bekommen habt. Der Lehrer, der euch das gegeben hat, hat aber offensichtlich gar kein Bild davon, wie viel ihr über's programmieren schon wisst, und hat euch dann einfach damit alleine gelassen. Das kann ja so gar nicht funktionieren.
Das ist zwar ein bisschen Offtopic, aber wenn ich mal so direkt fragen darf:
Was machst du eigentlich grade und woher hast du die Aufgabenstellung?
Es sieht ja ja so aus, als wäre das vor ein paar Jahren mal eine Abituraufgabe gewesen, die ihr jetzt zur Übung als Hausaufgabe bekommen habt. Der Lehrer, der euch das gegeben hat, hat aber offensichtlich gar kein Bild davon, wie viel ihr über's programmieren schon wisst, und hat euch dann einfach damit alleine gelassen. Das kann ja so gar nicht funktionieren.
Ich bin jetzt in der 11ten Klasse und hatte halt letztes Jahr das erste mal so „richtig“ Informatik, aber da Corona stattgefunden hat, gab es leider nicht viel Unterricht in der Schule und somit auch sehr viel selbst beibringen zuhause. In den letzten 4 Monaten fand dann das statt, was ich schon bei einer anderen Antwort geschrieben hatte. Unser Lehrer hat sehr viel mehr Praxis als Theorie gemacht als der andere Lehrer, was damals schön angenehm war, nur halt jetzt zu Problemen führt, obwohl man sagen muss, die aus dem anderen Kurs haben auch alle sehr ähnliche Probleme. Trotzdem gabs vom Lehrer natürlich Sprüche wie „Ja, doch das habt ihr gemacht und jetzt keine Fragen mehr.“ nachdem wir halt Fragen zu Themen gestellt haben, die wir in unserem alten Kurs nicht behandelt haben.
Hier noch die genaue Aufgabenstellung ( Die Klassen Queue und Stacks sollten wir uns runterladen und waren schon vorgegeben):
Achso, ok, danke. Sowas ähnliches habe ich mir schon Gedacht.
Von der Aufgabenstellung her soll die Klasse Peter also schon ein Queue reinbekommen, dann intern mit dem Stack das Queue umdrehen und ausgeben können. Ich hatte mich schon ein bisschen gefragt, was man wohl davon hat, das alles in eine Funktion zu bauen.
Ich habe mir gestern Abend tatsächlich noch Spaßeshalber BlueJ angeguckt und dadrin dann auch mal die Peter Klasse programmiert. Nur hatte ich da die Aufgabenstellung noch nicht, deswegen ist es nicht wirklich dieses "Trhekegmu" und hat auch keine Funktion "ausgabe_zahlenfolge()".
PS: Hat BlueJ eigentlich eine Autovervollständigung? Ich habe irgendwie keine gefunden.
Java:
public class Peter
{
public void doIt() {
// Queue erstellen und mit Zahlen füllen
Queue<Integer> queue = new Queue<>();
queue.enqueue(42);
queue.enqueue(23);
queue.enqueue(16);
queue.enqueue(15);
queue.enqueue(8);
queue.enqueue(4);
// Stack erstellen und Queue übertragen
Stack<Integer> stack = new Stack();
while (!queue.isEmpty()) {
stack.push(queue.front());
queue.dequeue();
}
// Stack ausgeben
while (!stack.isEmpty()) {
System.out.println(stack.top());
stack.pop();
}
}
}