我正在写一个数独生成器。
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)
有人可以告诉我应该改变什么吗?
答案 0 :(得分:1)
StackOverflowError是递归运行得太深时得到的。这通常是设计错误的标志。在我看来,你允许随机数生成器来控制递归的深度。这绝对是一个坏主意,因为无法保证RNG会在VM耗尽堆栈空间之前生成避免递归调用所需的数字。
还有其他问题。这行代码在给定的上下文中似乎没有任何用处:
k--;
你应该多考虑一下你的算法。