当前位置: 代码迷 >> Java相关 >> 无聊时发现的一个有关问题,解答!
  详细解决方案

无聊时发现的一个有关问题,解答!

热度:2997   发布时间:2013-02-25 21:47:07.0
无聊时发现的一个问题,请教高手解答!!!!
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楼正解。
------解决方案--------------------------------------------------------
我还以为是啥,结果......粗心写成了死循环。
  相关解决方案