我认为我的代码是正确的,但我不知道它为什么不在堆栈中添加元素。 我应该在main中创建其他两个堆栈吗?
import java.util.Stack;
public class stacks {
public Stack<Integer> in = new Stack<Integer>();
public Stack<Integer> out = new Stack<Integer>();
public void enqueue(int value){
in.push(value);
}
public int dequeue(){
if (out.isEmpty()){
while(!in.isEmpty()){
out.push(in.pop());
}
}
return out.pop();
}
public static void main(String[] args) {
in.enqueue(10);
in.enqueue(49);
}
}
答案 0 :(得分:0)
这里的问题是你试图制作一个静态引用(从主要的)到非静态的东西。
进行以下更改:
public static int dequeue()
public static void enqueue(int value)
对此的解决方法是创建面向对象的堆栈队列类,然后在单独的类中创建该堆栈队列类的实例。这将消除任何静态参考问题,并使您的程序与当今常见的面向对象编程标准相提并论。像这样:
import java.util.Stack;
public class stacksTest {
public Stack<Integer> in = new Stack<Integer>();
public Stack<Integer> out = new Stack<Integer>();
public void enqueue(int value){
in.push(value);
}
public int dequeue(){
if (out.isEmpty()){
while(!in.isEmpty()){
out.push(in.pop());
}
}
return out.pop();
}
}
然后创建一个新类:
public class Test {
public static void main(String[] args) {
stackTest st = new stackTest();
st.enqueue(10);
st.dequeue(10);
}
}
答案 1 :(得分:0)
您的代码绝对正确。你错过了一件小事。
您在stack 1
期间推送enqueue
中的元素。
在dequeue
期间,您正在弹出stack 1
中的元素并推送stack 2
。然后你弹出stack 2
的顶部元素。
(1)。 你缺少的东西是。从堆栈2中弹回所有元素并将它们推送到堆栈1.因此,我建议您这样做:
public int dequeue(){
if (out.isEmpty())
{
while(!in.isEmpty())
{
out.push(in.pop());
}
}
int outVar = out.pop();
while(!out.isEmpty())
{
in.push(out.pop());
}
return outVar;
}
(2)。在主要方法。您不必创建两个不同的堆栈。您只需要创建类Stacks
的对象。这将解决目的。
public static void main(String[] args) {
Stacks obj = new Stacks();
obj.enqueue(10); // Would enqueue 10 in the Stack 1 of the Object 'obj'
obj.enqueue(49);
System.out.println(obj.dequeue());// Would display the dequeued element.
}
希望这有帮助。