我想画这个:

public void drawCircle(int x, int y, int diameter, int it) {

int d = diameter / 3;

if (it == 0) {

return;

}

g.setColor(Color.green);

g.fillOval(x, y, d, d);

drawCircle(x, y, d, it--); // centre

drawCircle(x - d, y, d, it--); // left

drawCircle(x + d, y, d, it--); // right

}

出于这个问题的目的,忽略我画圆圈的实际位置 – 我会稍后改变它,因为它不太正确.但是,我在程序的逻辑中哪里出错了?对我来说,似乎很清楚我称这种方法在每次迭代中绘制三个圆圈.这是我的错误:

Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError

at sun.java2d.loops.ProcessPath.ProcessMonotonicCubic(Unknown Source)

at sun.java2d.loops.ProcessPath.ProcessCubic(Unknown Source)

at sun.java2d.loops.ProcessPath.doProcessPath(Unknown Source)

at sun.java2d.loops.ProcessPath.fillPath(Unknown Source)

at sun.java2d.pipe.BufferedRenderPipe.fillPath(Unknown Source)

at sun.java2d.pipe.BufferedRenderPipe.fill(Unknown Source)

at sun.java2d.pipe.BufferedRenderPipe.fillOval(Unknown Source)

at sun.java2d.SunGraphics2D.fillOval(Unknown Source)

at Draw.drawCircle(Draw.java:40)

at Draw.drawCircle(Draw.java:41)

这是第40和41行:

g.fillOval(x, y, d, d);

drawCircle(x, y, d, it--); // centre

感谢帮助.

解决方法:

您的递归调用在每次递归调用期间都会收到相同的值,因为它会在递减之前返回它的值.

假设你想在一次迭代中保持它的值不变,只需将它传递给递归调用,例如1.

drawCircle(x, y, d, it - 1); // centre

标签:java,recursion

来源: https://codeday.me/bug/20190624/1279883.html

使用java绘图类绘制圆圈_java – 递归绘制圆圈相关推荐

  1. 在Java绘图坐标原点在_java 绘图

    java 绘图 圆形.线条.矩形.填充 插入图片 文字 //绘图 import java.awt.*; import javax.swing.*; public class Index extends ...

  2. java流类图结构_java I/O 流总结

    一.java 流操作有关的类和接口: 类                                                                          说明 Fil ...

  3. java 常规类的可见性_Java 12常规可用性

    java 常规类的可见性 马克·雷因霍尔德(Mark Reinhold) 今天宣布 ," Java 12的参考实现JDK 12现在已全面上市." Reinhold在该公告中指出,& ...

  4. java流类图结构_java学习之IO流(学习之旅,一)

    个人在学习IO流的时候看到如下所示java 流类图结构的时候,我的感想是,这么多··处于蒙的状态. Java流类图结构 这么多,没有分类不好学,那我们就慢慢一口一口的吃,这样每天学习一点就好了,其实很 ...

  5. java电脑类的接口_java 一个类实现两个接口的案例

    直接用英文逗号分隔就可以了,比如:? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 inerface IHello { String sayHello ...

  6. java日历类add方法_Java日历computeTime()方法及示例

    java日历类add方法 日历类computeTime()方法 (Calendar Class computeTime() method) computeTime() method is availa ...

  7. java日历类add方法_Java日历computeFields()方法及示例

    java日历类add方法 日历类的computeFields()方法 (Calendar Class computeFields() method) computeFields() method is ...

  8. java日历类add方法_Java日历setFirstDayOfWeek()方法与示例

    java日历类add方法 日历类setFirstDayOfWeek()方法 (Calendar Class setFirstDayOfWeek() method) setFirstDayOfWeek( ...

  9. java日历类add方法_Java日历setMinimalDaysInFirstWeek()方法与示例

    java日历类add方法 日历类setMinimalDaysInFirstWeek()方法 (Calendar Class setMinimalDaysInFirstWeek() method) se ...

最新文章

  1. GO语言教程4:defer(延迟语句)详解
  2. 【玩转双11】今年有点不一样,51CTO学院告诉你如何省钱!
  3. 通过修改程序解决Vista/Win7/Win8下应用程序兼容性问题
  4. F5 Priority Group Activation
  5. 5、删除用户(DROP/DELETE USER)
  6. C++ stirng,int 互转(转载)
  7. android fragmentactivity fragment,Android:Activity与Fragment通信(99%)完美解决方案
  8. 移动前端框架重构几个关键问题
  9. python的变量名有哪些_【python字符串做变量名的方法有哪些?这些方法对python应用很重要】- 环球网校...
  10. mysql -e 导出_mysql 导出数据导入数据
  11. HDU6064 Besttheorem
  12. 使用XMLHttpRequest
  13. Ubuntu16.0.4 通过Docker安装酷Q
  14. 单片机c语言编程乘法运算符,单片机C语言编程常用的运算符介绍
  15. 学嵌入式职业发展方向有哪些?
  16. 官宣 .NET 6 RC (Release Candidate) 2
  17. python无限循环小数_如何把一个无限循环小数转换成一个分数(算法)
  18. 壁纸网站研究:强大到没朋友的壁纸网站整理(动漫/二次元/宅男/风景/真人)
  19. Android折腾记——Linux on Android在Android手机上跑Linux教程
  20. struts2-spring-hibernate实现员工的增删查功能

热门文章

  1. Win 10 开发中Adaptive磁贴模板的XML文档结构,Win10 应用开发中自适应Toast通知的XML文档结构...
  2. 动易系统SiteWeaver™CMS6.8SQL Ac正版Build-090918-源代码下载QQ群:55317566.
  3. [solution]淘宝首页可以ping通但是打不开
  4. 压缩包文件上传导致覆盖rce
  5. HTTPS 防范中间人攻击原理
  6. Android开源项目发现---ListView篇(持续更新)
  7. 一边学计算机一边上班累的说说,一个人上班累的说说心情短语
  8. OpenCV图像处理--warpPerspective透视变换
  9. U3D网络游戏,大厅房间
  10. 行走的漏洞利用机器人:僵尸网络病毒携71个EXP占领高地