在 java 中反转堆栈

Reversing a 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("}");
}

所以,我有一个包含 10 个整数的堆栈,我想反向打印它。我编写了一个创建队列的新方法,每次它使用 pop 从堆栈中删除和 returns 一个整数时,它都会将其添加到队列中。问题是 while(!arrCopy.isEmpty()) 似乎没有执行,队列是空的。这里有铸造问题吗?还是我向队列中添加元素的方式有问题?

谢谢!

编辑: 这是我的主要功能的代码(这是我的其余代码):

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);


}

解决方法: 我得到它的工作,谢谢!问题是我使用 pop 来 return (但删除)堆栈中的所有元素以便在反转它之前打印它,这导致堆栈为空。这就是我改变它的方式!

    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));


}

只需使用以下代码反转堆栈顺序即可。即颠倒顺序。

import java.util.Collections;
import java.util.Stack;

public class Test {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();

        for (int i = 0; i < 10; i++) {
            stack.push(i);
        }

        System.out.println("Before reverse" + stack);
        reverse(stack);
    }

    public static void reverse(Stack<Integer> arr){
        arr.sort(Collections.reverseOrder());
        System.out.println("After reverse");
        System.out.println(arr);
    }
}

输出是:

Before reverse[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
After reverse
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

这里:

while(!a.empty()){
    System.out.print((int)a.pop() + ", ");
}
System.out.print("}");

reverse(a);

您正在清空堆栈,然后再调用reverse。如果您一直从堆栈中弹出元素直到 a.empty() returns 为真,那么您已经清空了堆栈,并且您正在将一个空堆栈传递给 reverse 方法。

为什么不直接使用:

System.out.println(a);
reverse(a);

无需为了打印它们而从堆栈中弹出所有元素。