Я пишу генератор судоку.Переполнение стека при попытке генерировать случайное число
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);
}
эта часть программы является недействительным, который инициирует изменение числа Int таблицы на случайно сгенерированных позиции (б, в) к значению. заброшенная ошибка
Exception in thread "main" java.lang.StackOverflowError
at java.util.Random.nextInt(Random.java:307)
может кто-нибудь сказать мне, что я должен изменить?
Преобразование, что рекурсивный алгоритм в повторяющийся: http://stackoverflow.com/questions/159590/way-to-go-from-recursion-to-iteration –
Что случилось с генератором рекурсивного номера? Изменение алгоритма из рекурсии на итерацию не поможет ОП понять рекурсию, которая на самом деле может быть причиной написания ее таким образом. @ user1480211: вы получаете ошибку переполнения стека, потому что вам нужно вернуться после того, как вы достигнете базового варианта. –
Здесь что-то не хватает: ветка else просто рекурсирует с теми же параметрами. Если один из vcheck, hcheck или tcheck не модифицирует содержимое массива, он никогда не вернется, как только он достигнет этого состояния. Кроме того, используйте имена переменных, которые имеют смысл. Я понятия не имею, что этот метод должен делать. – Alex