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删除并从堆栈中返回一个整数时,它会将它添加到队列中。问题是while(!arrCopy.isEmpty())
似乎没有执行,队列是空的。这里有铸造问题吗?或者我在队列中添加元素的方式有问题吗?
谢谢!
编辑: 这是我的main函数的代码(这是我的其余代码):
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返回(但删除)堆栈中的所有元素,以便在反转之前打印它,这导致了一个空堆栈。这就是我改变它的方式!
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));
}
答案 0 :(得分:0)
使用下面的代码反转堆栈顺序。这扭转了秩序。
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);
}
}
Out put是:
Before reverse[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
After reverse
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
答案 1 :(得分:0)
下面:
var RequestDict = [String: AnyObject]()
func API() {
self.RequestDict = result["rows"]![0]["value"] as! [String: AnyObject]
}
您在调用while(!a.empty()){
System.out.print((int)a.pop() + ", ");
}
System.out.print("}");
reverse(a);
之前清空堆栈。如果在reverse
返回true之前继续从堆栈弹出元素,那么你已经清空了堆栈,并且你将空堆栈传递给a.empty()
方法。
为什么不使用:
reverse
无需弹出堆叠中的所有元素即可打印它们。