日期:2014-05-20 浏览次数:20819 次
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()); } } }
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()); } } }
------解决方案--------------------
错误的原因是在于“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());
}
------解决方案--------------------
也可以这样。
for(int i = 0;i <satck.length;)
{
System.out.println((String)stack.pop());
}
原因很简单,不解释了。
------解决方案--------------------
哈哈。这个问题有点蒙人。你的这个stack一直在变的。所以猛一看,有点晕了。第一次i++ 为1 了,stack.length为4;第二次i++为2 ,stack.length为3了,第二次i++为3,stack.length为2了。所以第三次条件就不成立了。给我分吧。