Судоку - петлевой сканер - PullRequest
       10

Судоку - петлевой сканер

0 голосов
/ 04 ноября 2018

В настоящее время я делаю судоку с использованием Java, однако я не могу понять, как правильно зациклить мой сканер. Пока он печатает это:

. 1 . | 3 . . | 8 . . 
5 . 9 | 6 . . | 7 . . 
7 . 4 | . 9 5 | . 2 . 
----------------------
4 . . | . . . | 1 . . 
. 2 8 | . 7 1 | . 6 3 
. . . | 2 . 4 | 9 5 . 
----------------------
6 . 3 | . . 9 | . . 7 
. . . | 4 2 . | 5 1 6 
. 5 2 | . 8 . | . 4 . 
Next move, please (row , column , value )

И я могу поменять символы. с моим кодом, но я хочу зациклить это правильно. Поэтому, если судоку по-прежнему содержит символ '.', Я хочу, чтобы сканер зациклился, чтобы отредактировать его еще раз. Я все еще довольно новичок в написании сценариев

И вот код, который я сделал для его редактирования:

    public void moves(int row , int column , int value) {
        value += 48;
        if (list.get(row).charAt(column) == '.'){
            StringBuilder sb = new StringBuilder(list.get(row));
            sb.setCharAt(column, (char)value);
            list.set(row, sb.toString());
        }
    }

    public static void main(String[] args) throws Exception  {
        Sudoku s = new Sudoku("C:\\Users\\caspe\\Downloads\\Sudoku001.sdk");
        s.printBoard();
        s.errorCheck();

        System.out.println("Next move, please (row , column , value )");
        Scanner scanner = new Scanner(System.in);
        int row = scanner.nextInt();
        int column = scanner.nextInt() ;
        int value = scanner.nextInt();
        s.moves(row, column, value);
        s.errorCheck();
        s.printBoard();
    }
}

Итак, чтобы подвести итог, как я могу зациклить сканер, пока не останется больше точек / '.'?

1 Ответ

0 голосов
/ 04 ноября 2018

В вашем коде определите int, называемый numDots, который отслеживает количество оставшихся точек. В вашей игровой логике, в случае правильного хода, вы уменьшаете numDots на один.

Для этого вы можете изменить move на:

public boolean moves(int row , int column , int value) {
    value += 48;
    if (list.get(row).charAt(column) == '.'){
        StringBuilder sb = new StringBuilder(list.get(row));
        sb.setCharAt(column, (char)value);
        list.set(row, sb.toString());
        return true;
    }
    else {
        return false;
    }
}

Теперь в вашем main вы можете сделать:

Sudoku s = new Sudoku("C:\\Users\\caspe\\Downloads\\Sudoku001.sdk");
s.printBoard();
s.errorCheck();
int numDots = s.getNumDots();
Scanner scanner = new Scanner(System.in);
while (numDots > 0) {
    System.out.println("Next move, please (row , column , value )");
    int row = scanner.nextInt();
    int column = scanner.nextInt() ;
    int value = scanner.nextInt();
    if (s.moves(row, column, value)) {
        numDots--;
        s.errorCheck();
        s.printBoard();
    }
}

Чтобы получить количество точек из вашего Sudoku, добавьте следующий метод в класс Sudoku:

public int getNumDots() {
    int numDots = 0;
    for (String row: list) {
        for (int i = 0; i < row.length(); i++) {
            if (charAt(i) == '.') {
                numDots++;
            }
         }
    }
    return numDots;
}
...