日期:2014-05-20  浏览次数:20839 次

无聊时发现的一个问题,请教高手解答!!!!
Java code

  public class TestStack {
 
    public static void main(String[] args) {
        Deque<String> st = new ArrayDeque<String>();
         int in=1000;
         int temp=in;
         while(temp>0){
             st.push("1");//这个地方报 java.lang.OutOfMemoryError: Java heap space        
             temp=in/2;
         }         
         Iterator<String> itr=st.descendingIterator();
         while(itr.hasNext()){
             System.out.println(itr.next());
         }
    }

}



------解决方案--------------------
while(temp>0)
死循环啊,当然会报内存溢出了。
------解决方案--------------------
temp第一次1000
然后一直是1000/2=500,
都>0,死循环了。
------解决方案--------------------
在这里1/2=1

所以以后一直都是1。循环结束不了。
------解决方案--------------------
你这里变量in是多余的。可以改成

Java code

    public static void main(String[] args) {
        Deque<String> st = new ArrayDeque<String>();
        int temp = 1000;
        while (temp > 0) {
            st.push("1");    
            temp /= 2;
        }
        Iterator<String> itr = st.descendingIterator();
        while (itr.hasNext()) {
            System.out.println(itr.next());
        }
    }

------解决方案--------------------
探讨

在这里1/2=1

所以以后一直都是1。循环结束不了。

------解决方案--------------------
探讨

temp第一次1000
然后一直是1000/2=500,
都>0,死循环了。

------解决方案--------------------
temp=in/2 改为: temp=temp/2 否则:2楼正解。
------解决方案--------------------
我还以为是啥,结果......粗心写成了死循环。