import java.util.LinkedList;
//LinkedList实现栈
public class StackTest
{
@SuppressWarnings("rawtypes")
LinkedList list = new LinkedList(); 


//入栈
@SuppressWarnings("unchecked")
public void push(Object o)
{
 list.addLast(o);
}
//出栈
public Object pop()
{
return list.removeLast();

}
public boolean isEmpty()
{
return list.isEmpty();

}
public int length()
{
return list.size();
}


 public static void main(String[] args)
{
StackTest stack = new StackTest();
stack.push(new String("hello"));
stack.push(new String("hello2"));
stack.push(new String("hello3"));
stack.push(new String("hello4"));
System.out.println(stack.length());//结果是4
for(int i = 0; i < stack.length() ; i++) //将stack.length()换成4,结果就是我期望的。
{
System.out.println((String)stack.pop());
}
}
}

解决方案 »

  1.   

    多加个变量就行了import java.util.LinkedList;
    //LinkedList实现栈
    public class StackTest
    {
        @SuppressWarnings("rawtypes")
        LinkedList list = new LinkedList(); 
        
        
        //入栈
        @SuppressWarnings("unchecked")
        public void push(Object o)
        {
         list.addLast(o);
        }
        //出栈
        public Object pop()
        {
                return list.removeLast();
            
        }
        public boolean isEmpty()
        {
            return list.isEmpty();
            
        }
        public int length()
        {
            return list.size();
        }
        
        
         public static void main(String[] args)
        {
            StackTest stack = new StackTest();
            stack.push(new String("hello"));
            stack.push(new String("hello2"));
            stack.push(new String("hello3"));
            stack.push(new String("hello4"));
            System.out.println(stack.length());//结果是4
            int t = stack.length();
            for(int i = 0; i < t ; i++) //将stack.length()换成4,结果就是我期望的。
            {
            System.out.println((String)stack.pop());
            }
        }
    }
      

  2.   

    错误的原因是在于“stack.pop()”会让元素不断减少,所以不能用这种方式进行循环:
    for(int i = 0; i < stack.length() ; i++) //将stack.length()换成4,结果就是我期望的。
    {
       System.out.println((String)stack.pop()); -- 每次pop,length()就会减1
    }常规写法应该是:
    while(!stack.isEmpty()) {
      System.out.println((String)stack.pop());
    }
      

  3.   

    也可以这样。
            for(int i = 0;i <satck.length;)
            {
            System.out.println((String)stack.pop());
            }
    原因很简单,不解释了。
      

  4.   

    哈哈。这个问题有点蒙人。你的这个stack一直在变的。所以猛一看,有点晕了。第一次i++ 为1 了,stack.length为4;第二次i++为2 ,stack.length为3了,第二次i++为3,stack.length为2了。所以第三次条件就不成立了。给我分吧。