0

我正在写一个数独生成器。

static void change(int[][] x, int[][] y, int[][] z, int[][] w, int[][] u, int k) {
    int a = r1.nextInt(9);
    int b = r2.nextInt(2);
    int c = r3.nextInt(2);
    if (x[b][c] != 0 && vcheck(a, c, x, y, z) != false && hcheck(a, b, x, u, w) != false && tcheck(a, x) != false) {
        x[b][c] = a;
        k--;
    } else change(x, y, z, w, u, k);
}

程序的这一部分是空白,它启动将随机生成的位置 (b,c) 上的表中的数字更改为值 a。抛出的错误是

Exception in thread "main" java.lang.StackOverflowError
    at java.util.Random.nextInt(Random.java:307)

有人能告诉我我应该改变什么吗?

4

1 回答 1

1

StackOverflowError 是当你的递归运行太深时你得到的。这通常是设计错误的标志。在我看来,您允许随机数生成器来控制递归的深度。这绝对是个坏主意,因为不能保证 RNG 会在 VM 用完堆栈空间之前生成避免递归调用所需的数字。

还有其他问题。这行代码在给定的上下文中似乎没有做任何有用的事情:

k--;

您可能应该多考虑一下您的算法。

于 2012-06-25T14:32:38.980 回答