Перезапустите цикл while, если boolean == false - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь стать лучше в Java, создавая головоломку судоку, но я сталкиваюсь с некоторыми проблемами. В настоящее время, если я добавлю «Судебный» ввод в «Судоку», он просто продолжится, но я пытаюсь заставить скрипт снова запрашивать значение, если оно «незаконно». Как видно ниже в коде, это когда мои публичные логические «движения» ложны, я пытаюсь запустить цикл while еще раз.

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

    while(getNum() > 0) {
        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();
        if (s.moves(row, column, value) == false); {
            //Try again
        }

        s.printBoard();
    }
}

Я все еще не могу найти решение после нескольких разных попыток, поэтому помощь очень ценится!

Это мой метод getNum для дальнейшего понимания:

public static int getNum() {
    int getNumb = 0;
    for(int j = 0; j < list.size(); j++) {
        for (int i=0; i < list.get(j).length(); i++) {
            if(list.get(i).charAt(j) == '.') {
                getNumb++;
            }
        }
    }
    return getNumb;
}

1 Ответ

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

То, как вы написали свой код, будет напечатано на доске Судоку, независимо от того, является ли s.move истинным или ложным. Вы можете исправить это, добавив оператор else в оператор if.

Например:

if(s.moves(row, column, value) == false){
    //print error message
}else {
    s.printBoard();
}
...