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