递归地划分正方形区域
我试图通过在正方形中随机选择一个点并通过它绘制两条线,然后将每个象限分成4个等等,直到宽度/高度为1,将广场分成4个小象限递归的方式。 我的代码在这里:
public static void draw(int x0, int y0, int xmax, int ymax) {
if (Math.abs(xmax - x0) > 1 && Math.abs(ymax - y0) > 1) {
int rx = r.nextInt(xmax - 1) + 1; // line A
int ry = r.nextInt(ymax - 1) + 1; // line B
StdDraw.line(rx, y0, rx, ymax);
StdDraw.line(x0, ry, xmax, ry);
draw(x0, y0, rx, ry); // line C
draw(x0, ry, rx, ymax); // line D
draw(rx, ry, xmax, ymax); // line E
draw(rx, y0, xmax, ry); // line F
}
else ;
也就是说,我传递左下角坐标(x0,y0)和右上角坐标(xmax,ymax)。 每当我注释掉D,E和F行时,一切正常。 但是当我取消注释D,E或F时,我得到这个错误java.lang.IllegalArgumentException: n must be positive
,通常指向A行或B行。有人可以告诉我这个错误意味着什么以及我可以如何修理它?
考虑到nextInt(int n)
似乎包含那段代码中唯一的n
变量,它很可能是引发该错误的那个变量。
确保xmax-1
和ymax-1
不会变为负数,因为nextInt
的文档明确指出它会在负数上引发此错误:
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Random.html#nextInt(int)
这是因为在递归过程中,在nextInt
- > (xmax - 1)
传递的值变为负值。
r.nextInt(xmax - 1);
如果(xmax - 1)
为负值,您将得到异常。 因为, nextInt()
方法只取positive
。
上一篇: Recursively dividing up square regions
下一篇: Scala Tail Recursion