#javascript #algorithm #loops #infinite-loop #sudoku
#javascript #алгоритм #циклы #бесконечный цикл #судоку
Вопрос:
Я пытаюсь создать игру в судоку на JavaScript (с помощью React). У меня есть идея, что я создам полную доску судоку для initial. В JSX я создал 81 поле (входные данные) с классами col1, col2, col3… и те же row1, row2, row3 … (пока ТОЛЬКО правила со строкой и столбцом, без этого правила большого квадрата).
Я пытаюсь создать начальную функцию, когда все поля получают правильное значение. На данный момент эта функция выглядит так:
const setAllNumbers = () => {
for(let i = 1; i <= 9; i ){
const currentRow = [...document.querySelectorAll(`.row${i}`)];
const currentCol = [...document.querySelectorAll(`.col${i}`)];
let counter = 0;
while (counter < 9) {
const random = Math.floor(Math.random() * (9 - 1) 1);
const isDuplicateRow = currentRow.filter(ele => parseInt(ele.value) === random);
const isDuplicateCol = currentCol.filter(ele => parseInt(ele.value) === random);
if(isDuplicateRow.length === 0 amp;amp; isDuplicateCol.length === 0){
currentRow[counter].value = random;
counter ;
}else{
counter--;
}
}
}
}
Что я думаю, что я делаю:
- Я создал цикл FOR, for 9 (потому что 9 строк)
- Внутри цикла я получаю все элементы с row1, col1.. row2, col2 .. и т.д. Один за другим.
- Я создал цикл WHILE для 9 (потому что 9 полей в каждой строке)
- В каждом цикле я получаю случайное число от 1 до 9
- Убедитесь, что любой из элементов col1 или row1 уже имеет это значение.
- Если какой-либо из col1 и row1 НЕ ИМЕЕТ этого номера, я могу поместить номер в текущий элемент и перейти к другому.
- Если какой-либо из col1 или row1 уже ИМЕЕТ это число, я возвращаю свой СЧЕТЧИК на 1 и начинаю цикл снова с этого же элемента, пока не получу хороший результат.
Ну, это работает не так, как я ожидал… Вероятно, это бесконечный цикл, потому что мой браузер зависает, когда я запускаю это приложение.
Мэтт
Комментарии:
1.
counter < 9
вероятно, всегда решаетtrue
2. @evolutionxbox Но это не всегда должно быть правдой. Как вы можете видеть, я , когда его правильный номер и — когда он ucorrect. Таким образом, он должен генерировать полную, правильную плату, а не запускать бесконечный цикл.
3. Это следующий шаг. Чтобы выяснить, почему его счетчик никогда не превышает 8.