Я не мог сделать цикл, чтобы проверить номера игры судоку - PullRequest
0 голосов
/ 04 декабря 2018

Эй, я пытаюсь написать код для игры в судоку на Java и столкнулся с двумя проблемами

  1. цикл не работает, но это было, когда я использовал массив int
  2. когда я отбрасываю число в строке, столбце или квадрате, оно помещается в первый раз, что не должно, а во второй раз оно работает хорошо, но цикл останавливается, и это мой код

    import java.util.*;
        public class Solution {
            public static boolean isValidSudoku(char[][] board) {   
                short[] rows = new short[9];
                short[] cols = new short[9];
                short[] squares = new short[9];
                for(int row = 0; row < board.length; row++) {
                    for(int col = 0; col < board[0].length; col++) {
                        if(board[row][col] == '0') continue;
                        short value = (short) (1 << (board[row][col] - '1'));
                        if((value & rows[row]) > 0) return false;
                        if((value & cols[col]) > 0) return false;
                        if((value & squares[3*(row/3) + col/3]) > 0) return false;
                        rows[row] |= value;
                        cols[col] |= value;
                        squares[3*(row/3) + col/3] |= value;
                    }
                }
                return true;
            }
            public static void main(String[] args) {
                Scanner kb = new Scanner(System.in);
                char [][] board = new char[][] {
                        { '1', '2', '3', '4', '9', '7', '8', '6', '5' },
                        { '4', '5', '9', '0', '0', '0', '0', '0', '0'},
                        { '6', '7', '8', '0', '0', '0', '0','0', '0' },
                        { '3', '0', '0', '0', '1', '0', '0', '0', '0' }, 
                        { '2', '0', '0', '0', '0', '0', '0', '0', '0' },
                        { '9', '0', '0', '0', '0', '5', '0', '0', '0' }, 
                        { '8', '0', '0', '0','0', '0', '0', '0', '0' }, 
                        { '7', '0', '0', '0', '0', '0', '0', '0', '0' },
                        { '5', '0', '0', '9', '0', '0', '0', '0', '0' } 
                        };
                int rows, column = 0;
                char Ch1;
                String seat;
                int taken = 0 ;
                do {
                    for (int i = 0; i < board.length; i++) {
                        for (int j = 0; j < board[i].length; j++) {
                            System.out.print(board[i][j] + " ");
                        }
                        System.out.println();
                    }
                    seat = kb.next();
                    rows = Integer.parseInt(seat.substring(0,1)) ; 
                    column =Integer.parseInt(seat.substring(1,2)) ; 
                    Ch1 = seat.charAt(2);
                    if (board[rows-1][column-1] != '0' ) {
                        System.out.println("is full");
                        continue;
                    }
                    if (isValidSudoku(board) == false) {
                        System.out.println(isValidSudoku(board));
                        continue;
                    }
                    board[rows - 1][column-1] = Ch1 ;
                    taken++;
                } while (taken == 57);
            }
        }
    
...