尝试生成随机数时堆栈溢出

时间:2012-06-25 14:06:27

标签: java random stack-overflow

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

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);
    }

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

k--;

你应该多考虑一下你的算法。