unreachable statement

188
19 декабря 2017, 18:11

Вот есть сам код: (это игра крестики нолики)

public class Main {
    public static char[][] map;
    public static final int SIZE = 5;
    public static final int DOTS_TO_WIN = 4;
    public static final char DOT_EMPTY = '•';
    public static final char DOT_X = 'X';
    public static final char DOT_O = 'O';
    public static Scanner vvod = new Scanner(System.in);
    public static void newMap() {
        map = new char[SIZE][SIZE];
        for (int i = 0; i < SIZE; i++) {
            for (int j = 0; j < SIZE; j++) {
                map[i][j] = DOT_EMPTY;
            }
        }
    }
    public static void printMap() {
        for (int i = 0; i < SIZE; i++) {
            for (int j = 0; j < SIZE; j++) {
                System.out.print(map[i][j] + " ");
            }
            System.out.println();
        }
        System.out.println();
    }
    public static void human() {
        int x, y;
        do {
            System.out.println("Введите координаты точки (х у)");
            x = vvod.nextShort() - 1;
            y = vvod.nextShort() - 1;
        } while (!freefield(x, y));
        map[x][y] = DOT_X;
    }
    public static void comp() {
        int x, y;
        do {
            x = (int) (Math.random() * 6) - 1;
            y = (int) (Math.random() * 6) - 1;
        } while (!freefield(x, y));
        System.out.println("ход компьютера: x-" + (x + 1) + " у-" + (y + 1));
        map[x][y] = DOT_O;
    }
    public static boolean freefield(int x, int y) {
        if (x < 0 || x >= SIZE || y < 0 || y >= SIZE) {
            return false;
        }
        return map[y][x] == DOT_EMPTY;
    }
    public static boolean fullmap() {
        for (int i = 0; i < SIZE; i++) {
            for (int j = 0; j < SIZE; j++) {
                if (map[i][j] == DOT_EMPTY) return false;
            }
        }
        return true;
    }
    public static boolean proverka (char symb) {
        int x_win = 0, y_win = 0, col=0, row = 0, stop_1, stop_2;
        do {
            for (col = 0; col < 4; col++) {
                if (map[col][row] == symb) x_win++;
                else x_win = 0;
            }
            row++;
            if (x_win == 4) break; else x_win = 0;
        } while (row!=5) ;
        col = 0;
        do {
            for (row = 0; row < 4; row++) {
                if (map[row][col] == symb) y_win++;
                else y_win = 0;
            }
            col++;
            if (y_win == 4) break; else y_win = 0;
        } while (col!=5) ;
        if (x_win == 4 || y_win == 4) return true; else return false;
    }
    public static void main(String[] args) {
        newMap();
        printMap();
        while (true) {
            human();
            printMap();
            if (proverka(DOT_X));{
                System.out.println("Победа человека");
                break;
            }
            if (fullmap()){
                System.out.println("Ничья");
                break;
            }
            comp();
            printMap();
            if (proverka(DOT_O));{
                System.out.println("Победа компьютера");
               // break;
            }
            if (fullmap()){
                System.out.println("Ничья");
                break;
            }
        }
        System.out.println("Game over");
    }

В методе Main в цикле While есть вызывается класс proverka. В этом классе есть break, который выводит нас из цикла, если возвращается true. Если false цикл продолжается дальше. Однако:

if (proverka(DOT_X));{
            System.out.println("Победа человека");
            break;
        }
        if (fullmap()){
            System.out.println("Ничья");
            break;
        }

Второй IF уже не работает после break и программа говорит, что этот IF - unreachable statement. Уже битый час не могу разобраться почему так, может тут помогут ☺☻

Answer 1

Проблема очевидно тут:

if (proverka(DOT_X)); {         if (proverka(DOT_O)); {
                    ^---         и                  ^----
Answer 2

Во-первых, нужно убрать точку с запятой после условия в if - если условие будет выполняться, ничего не будет происходить. А тот блок, который в логике твоего кода должен выполняться при этом условии - будет выполняться всегда , думай об этом так - если бы в твоем коде вообще не было бы этой строки:

if (proverka(DOT_X));

Таким образом, у тебя программа всегда вылетает из цикла (потому что break в этом блоке находится) и даже не доходит до второго if

READ ALSO
Парсинг JSON в RxJava

Парсинг JSON в RxJava

Дело в том, что я раньше парсил локальный JSON в AsyncTaskНо я начал изучать RxJava и пытаюсь распарсить огромный JSON файл из assets таким образом:

197
Использование переменных в .properties

Использование переменных в .properties

Естьproperties файл в нем лежат пути:

209
Jax ws и jax rs это servlet?

Jax ws и jax rs это servlet?

Вот Spring MVC это простые сервлетыЯвляется ли реализации jax ws и jax rs основанными на servletax? к примеру те же Jersey и Metro

159
Избавиться от null с помощью Optional

Избавиться от null с помощью Optional

Есть вот такая конструкция

216