import java.util.Stack;
public class MyQueue {
Stack s=new Stack();
public void enQueue(Object obj){
s.push(obj);
}
public void deQueue(){
for(int i=s.size();i>0;i--){
System.out.println(s.pop());
}
}
public static void main(String[] args){
MyQueue q=new MyQueue();
q.enQueue("a");
q.enQueue("b");
q.enQueue("c");
q.enQueue("d");
q.deQueue();
}
}是这样实现么,为什么deQueue中写成for(int i=0;i<s.size()-1;i--)就不对呢

解决方案 »

  1.   

     for(int i=s.size();i>0;i--) 这里i=s.size()也就是队列q的长度是初始值,i--是对i进行自减,i>0是for循环的执行条件
    for(int i=0;i<s.size()-1;i--) 这里是i从初始值0开始自减,第二次循环时i就是-1了,这样循环下去,i<s.size()-1这个for循环的执行条件永远成立,就是一死循环
      

  2.   

    我打错了是for(int i=0;i<s.size()-1;i++)
      

  3.   

    lz想问的是不是这个,for(int i=0;i<s.size()-1;i++) 
    这里每次执行for循环,循环体内的s.pop()执行后,s.size()都会减1,同时i又在自增,
    也就是执行一次循环,i<s.size()-1,小于号左边自增,右边自减,执行次数到应该的执行次数的一半的时候就跳出循环了,显然有问题。
    可以这样写for(int i=0;i<s.size();) 
    lz注意for(#1;#2;#3) {#4}的执行顺序是,#1 #2#4#3 #2#4#3 #2#4#3 ...
    #1只执行一遍,#2执行多遍,所以s.size()的值的变化对写在#1的s.size()不影响,对写在#2的s.size()有影响
      

  4.   

    import java.lang.Exception;class MyStack
    {
    private static final int MAX_SIZE = 5;
    private int[] t = new int[MAX_SIZE];
    private int top = -1; public void push(int x) throws Exception{ if(isFull()){
    throw new Exception("栈已满");
    }else{
    t[++top] = x;
    }

    }

    public int pop() throws Exception{ if(isEmpty()){
    throw new Exception("栈为空");
    }else{
    return t[top--];
    }
    } public boolean isFull(){
    return top == MAX_SIZE - 1;
    } public boolean isEmpty(){
    return top == -1;
    } public void printStack(){
    for(int i = 0; i <= top; i++){
    System.out.print(t[i]);
    }
    }
    }public class Temp
    {
    public static void main(String[] args) throws Exception{
    MyStack ms = new MyStack();
    ms.push(1);
    ms.push(2);
    ms.push(3);
    ms.push(4);
    ms.push(5);
    System.out.println(ms.pop());
    //ms.push(6);
    ms.printStack();
    }
    }