作者tossakite (昱)
看板java
标题[问题] 递回次数有没有上限?
时间Thu Mar 1 17:18:30 2012
不好意思我是java的新手(刚学第五天...)
如果发问不得当真的很抱歉...
我目前正在写小画家
但刚刚写油漆桶功能的时候却遇到奇怪的问题
基本上我是用Depth First Search的概念写成递回函数
从滑鼠点下去的那点作为树根 一直向外扩散寻找需要变色的像素
扩散顺序是先往右边找 再往上、往左 最後往下找
结果测试结果发现
如果用铅笔圈出一块小面积(有测过奇形怪状) 油漆桶都可以成功把内部着色
但如果面积稍微大一点(大概超过50x50个像素的话)
它就无法着色了
所以怀疑是如果递回呼叫太多次它就会发生问题
测试了一下也发现
如果面积太大的话 递回总是跑到一半就自动被强行结束(每次结束的点都不一样)
可是递回次数应该不可能会有限制吧!?
上网都没有查到这方面有什麽限制存在
也不太可能是演算法出错 因为面积够小还是可以成功着色
由於程式码有点多(大概25行) 不太确定要不要PO出来
递回函数传入的参数有三个
一个是BufferedImage
一个是跟像素数量一样多的布林二维阵列 还有一个Point
难道是传入的参数太庞大的问题?
如果有需要检查程式码的话我可以再贴出来@@
烦请高手解惑!!
----------------------------
对不起我不知道有错误讯息这种东西QQQQ
是下面这个吗?
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
它後面接了很多 at .....
前几个是这样
at java.awt.image.DirectColorModel.getRGB(DirectColorModel.java:438)
at java.awt.image.DirectColorModel.getRGB(DirectColorModel.java:704)
at java.awt.image.BufferedImage.getRGB(BufferedImage.java:871)
at painter.test2.recursive(test2.java:887)
at painter.test2.recursive(test2.java:891)
at painter.test2.recursive(test2.java:891)
之後全部都是recursive函数
对不起我以後会注意版规的QQ
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.250.189
1F:推 LaPass:递回是拿记忆体、执行速度去换取程式码上的简洁性.... 03/01 17:22
2F:→ qrtt1:要有错误讯息先啊。 03/01 17:53
3F:推 PsMonkey:版规五... 不过念在你问题叙述够详细,就先锁文 03/01 18:47
4F:→ PsMonkey:请先看看有没有 Exception 讯息,再怀疑程式码 XDXD 03/01 18:48
※ 编辑: tossakite 来自: 140.112.250.189 (03/01 21:06)
5F:推 LaPass:是递回太多没错,请小心有没有无限递回,或乾脆换成回圈 03/01 21:15
6F:→ mars90226:最令人讨厌的错误之一XD 03/02 09:05
8F:推 PsMonkey:都写到这种程度的程式了,不知道有错误讯息也太神了点 03/02 15:18
9F:→ tossakite:谢谢sbrhsieh~我会研究看看的! 因为以前有学过半年C++ 03/02 23:29
10F:→ tossakite:只是刚碰Java不知道有错误讯息可以参考@@ 03/02 23:31
11F:→ qrtt1:又不是在打卡的时代,怎麽会没有错误讯息@@ 03/03 00:23
12F:→ tossakite:刚刚把问题解决了!! 感谢各位高手的帮忙:) 03/04 02:10
13F:推 psliurt:去买记忆体,反正现在DRAM厂快挂了,快去买 03/04 12:18
14F:推 LaPass:结果是什麽问题? 03/04 14:23
15F:→ tossakite:就一样递回过2000多层就坏掉 我改成超过2000层就跳出递 03/05 16:25
16F:→ tossakite:回 然後再加上其他补救措施@@ 03/05 16:27