Генератор инициалов доски судоку Java Script

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

         }
    }
 

Что я думаю, что я делаю:

  1. Я создал цикл FOR, for 9 (потому что 9 строк)
  2. Внутри цикла я получаю все элементы с row1, col1.. row2, col2 .. и т.д. Один за другим.
  3. Я создал цикл WHILE для 9 (потому что 9 полей в каждой строке)
  4. В каждом цикле я получаю случайное число от 1 до 9
  5. Убедитесь, что любой из элементов col1 или row1 уже имеет это значение.
  6. Если какой-либо из col1 и row1 НЕ ИМЕЕТ этого номера, я могу поместить номер в текущий элемент и перейти к другому.
  7. Если какой-либо из col1 или row1 уже ИМЕЕТ это число, я возвращаю свой СЧЕТЧИК на 1 и начинаю цикл снова с этого же элемента, пока не получу хороший результат.

Ну, это работает не так, как я ожидал… Вероятно, это бесконечный цикл, потому что мой браузер зависает, когда я запускаю это приложение.

Мэтт

Комментарии:

1. counter < 9 вероятно, всегда решает true

2. @evolutionxbox Но это не всегда должно быть правдой. Как вы можете видеть, я , когда его правильный номер и — когда он ucorrect. Таким образом, он должен генерировать полную, правильную плату, а не запускать бесконечный цикл.

3. Это следующий шаг. Чтобы выяснить, почему его счетчик никогда не превышает 8.