递归地划分正方形区域

我试图通过在正方形中随机选择一个点并通过它绘制两条线,然后将每个象限分成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-1ymax-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

  • 您可以在此行之前添加额外支票,以检查您的差异是否为负值或正值。 因此,您可以跳过这部分代码。
  • 链接地址: http://www.djcxy.com/p/80699.html

    上一篇: Recursively dividing up square regions

    下一篇: Scala Tail Recursion