我在java中,当你执行object1=object2
时,你会将object2
的引用复制到object1
,所以 object1
和 object2
指向同一个对象。对吗?
我编写了一个函数来对堆栈进行排序。
import java.util.Stack;
public class sortStack {
public static void main(String[] str) {
Stack<Integer> s = new Stack<Integer>();
s.push(2);
s.push(21);
s.push(43);
s.push(3);
s.push(87);
s.push(2);
s.push(12);
s.push(10);
s.push(25);
sortStack(s);
while (!s.isEmpty()) {
System.out.print(s.pop() + " ");
}
}
public static void sortStack(Stack<Integer> src) {
Stack<Integer> dst = new Stack<Integer>();
Stack<Integer> buf = new Stack<Integer>();//buffer
while (!src.isEmpty()) {
int v = src.pop();
if (dst.isEmpty()) {
dst.push(v);
}
while (!dst.isEmpty() && dst.peek() > v) {
buf.push(dst.pop());
}
dst.push(v);
while (!buf.isEmpty()) {
dst.push(buf.pop());
}
}
src = dst;
//Print:
//while(!src.isEmpty()){
// System.out.print(src.pop()+" ");
//}
}
}
我无法从类(class)中获得任何输出。如果我取消注释打印部分,它就很好。
我不明白调用该函数后 s
堆栈为空。我已经将 dst 分配给 s,所以 s 应该指向 dst 堆栈,对吗?
请帮忙!谢谢!
最佳答案
您正在分配对参数 src 的引用,该参数实际上是一个局部变量,因此您看不到对原始 Stack 变量 s 的任何影响。相反,让方法返回 dst 并分配返回的对象。即,
public static Stack<Integer> sortStack(Stack<Integer> src) {
// ....
return dst;
}
和
s = sortStack(s);
关于Java:对象分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20930676/