Rückwärtsfahren einen stack in java
public static void reverse(Stack arr){
Queue<Integer> arrCopy=new LinkedList<Integer>();
while(!arr.empty()){
arrCopy.add((int)arr.pop());
};
System.out.print("{ ");
while(!arrCopy.isEmpty()){
System.out.print((int)arrCopy.remove() + ", ");
}
System.out.print("}");
}
so, ich habe einen Stapel mit 10 Ganzzahlen, und ich möchte, um es zu drucken in umgekehrter. ich schrieb eine neue Methode erstellt eine Warteschlange, und jedes mal, wenn es entfernt und gibt einen integer vom stack mit pop, wird es fügen Sie es in die Warteschlange. das problem ist, dass while(!arrCopy.isEmpty())
scheint nicht ausgeführt werden und die Warteschlange leer ist. gibt es ein casting-problem hier? oder gibt es etwas falsch mit der Art und Weise, die ich Hinzugefügt habe Elemente der Warteschlange?
Dank!
edit:
hier ist der code meiner main-Funktion (das ist der rest von meinem code):
public static void main(String[] args) {
Random rand = new Random();
Stack<Integer> a=new Stack<Integer>();
for (int i=0; i<10; i++){
a.push(rand.nextInt(50));
}
System.out.print("{ ");
while(!a.empty()){
System.out.print((int)a.pop() + ", ");
}
System.out.print("}");
reverse(a);
}
Lösung:
ich habe es zu arbeiten, danke! das problem war, dass ich mit pop zurück (noch entfernen) alle Elemente aus dem stack, um es zu drucken, bevor Sie Rückwärtsfahren, was zu einem leeren stack. dies ist, wie ich es geändert, um zu arbeiten!
public static Queue reverse(Stack arr){
Queue<Integer> arrCopy=new LinkedList<Integer>();
while(!arr.empty()){
arrCopy.add((int)arr.pop());
}
return arrCopy;
}
public static void main(String[] args) {
Random rand = new Random();
Stack<Integer> a=new Stack<Integer>();
for (int i=0; i<10; i++){
a.push(rand.nextInt(50));
}
System.out.println("List:");
System.out.println(a);
System.out.println("Reversed List:");
System.out.println(reverse(a));
}
- Ich habe gerade deinen code getestet, und es funktioniert gut hier. Was ist Ihre Eingabe für die Funktion?
- Sind Sie sicher, dass Ihre
Stack
ist nicht leer? - Können Sie uns zeigen Sie den code für
Stack
. - ich bin mir 100% sicher, dass der stack nicht leer ist, als ich ausgedruckt habe, es zu testen es raus. der Stapel druckt, aber die Rückseite ist leer. mein input Stack arr, die ich initialisiert, in der main-Funktion und gegeben haben, die zufällige Ganzzahlen.
- Übergeben Sie einen leeren stack der Funktion. Beim drucken wird die stack-Sie platzen aus allen Elementen. So, jetzt Ihr Stapel leer wird, vor der übergabe in die Funktion.
- Niemand sonst Debuggen können dies für Sie. Wenn die
while(!arr.empty())
Schleife nicht eingegeben, dann wird der stack ist bereits leer. Sie brauchen, um Ihren debugger zu gehen und herauszufinden, was passiert ist. - Sie sind Entleerung der stack vor dem Aufruf der
reverse
Methode! - AH, danke!!!! das scheint das problem zu sein!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier:
Sind Sie leeren stack vor dem Aufruf
reverse
. Wenn Sie halten knallen Elemente aus dem Stapel, bisa.empty()
true zurückgibt, dann haben Sie entleert den Stapel, und übergeben Sie einen leeren stack derreverse
Methode.Warum nicht einfach:
Gibt es keine Notwendigkeit, Sie zu pop alle die Elemente aus, die Ihren stack um zu drucken.
Nur in umgekehrter Reihenfolge mit folgenden code. Das revers der Bestellung.
Ausgeschrieben ist: