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

a514718137 2012-03-29 05:01:56

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());
}
}

}
...全文
86 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
a514718137 2012-03-30
  • 打赏
  • 举报
回复
谢谢各位啦,本人是新手,以后多多指教啊!
安特矮油 2012-03-29
  • 打赏
  • 举报
回复
我还以为是啥,结果......粗心写成了死循环。
oldskywolf 2012-03-29
  • 打赏
  • 举报
回复
temp=in/2 改为: temp=temp/2 否则:2楼正解。
dryZeng 2012-03-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

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

2楼正确。
dryZeng 2012-03-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

在这里1/2=1

所以以后一直都是1。循环结束不了。
[/Quote]

我错了。
菖蒲老先生 2012-03-29
  • 打赏
  • 举报
回复
你这里变量in是多余的。可以改成


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());
}
}

dryZeng 2012-03-29
  • 打赏
  • 举报
回复
在这里1/2=1

所以以后一直都是1。循环结束不了。
菖蒲老先生 2012-03-29
  • 打赏
  • 举报
回复
temp第一次1000
然后一直是1000/2=500,
都>0,死循环了。
菖蒲老先生 2012-03-29
  • 打赏
  • 举报
回复
while(temp>0)
死循环啊,当然会报内存溢出了。

50,545

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧