Операнд ++ не увеличивает мою функцию иногда - PullRequest
0 голосов
/ 21 февраля 2019
    int generation = 0;

    System.out.println("\nGeneration " + generation + ":");

    for(int i = 0; i < rowcol; i++) {
        if(i > 0) {
            System.out.println();
        }
        for(int j = 0; j < rowcol; j++) {
            System.out.print(arr[i][j] + " ");
        }
    }

    boolean run = true;
    int copy[][] = arr;
    while(run) {

        int alive = 0;

        for(int i = 0; i < rowcol; i++) {
            for(int j = 0; j < rowcol; j++) {
                alive = 0;
                //top left
                if(i-1 > -1 && j-1 > -1) {
                    if(arr[i-1][j-1] == 1) {
                        ++alive;
                    }
                }
                //top
                if(i-1 > -1) {
                    if(arr[i-1][j] == 1) {
                        ++alive;
                    }
                }
                //top right wtf
                if(i-1 > -1 && j+1 < rowcol) {
                    if(arr[i-1][j+1] == 1) {
                        ++alive;
                    }
                }
                //left
                if(j-1 > -1) {
                    if(arr[i][j-1] == 1) {
                        ++alive;
                    }
                }
                //right
                if(j+1 < rowcol) {
                    if(arr[i][j+1] == 1) {
                        ++alive;
                    }
                }
                // down left
                if(i+1 < rowcol && j-1 > -1) {
                    if(arr[i+1][j-1] == 1) {
                        ++alive;
                    }
                }
                //down
                if(i+1 < rowcol) {
                    if(arr[i+1][j] == 1) {
                        ++alive;
                    }
                }
                //down right
                if(i+1 < rowcol && j+1 < rowcol) {
                    if(arr[i+1][j+1] == 1) {
                        ++alive;
                    }
                }


                if(arr[i][j] == 1) {
                    if(alive < 2) {
                        copy[i][j] = 0;
                    } else if(alive > 3) {
                        copy[i][j] = 0;
                    }
                } else if(arr[i][j] == 0 && alive == 3) {
                        copy[i][j] = 1;
                    }



            }
        }

        arr = copy;

        generation++;

        System.out.println("\nGeneration " + generation + ":");

        for(int i = 0; i < rowcol; i++) {
            if(i > 0) {
                System.out.println();
            }
            for(int j = 0; j < rowcol; j++) {
                System.out.print(arr[i][j] + " ");
            }
        }
    }

}

}

это мой код, в основном у меня есть домашнее задание по созданию Игры Жизни с сетками 1 и 0, как бы большими не были пользовательские вводы, но у меня возникла проблема, когда яПроверяю, сколько клеток вокруг него живы

Введите количество строк / столбцов: 3

0,1,1,1,0,0,0,1,0

Поколение 0:

0 1 1

1 0 0

0 1 0

Поколение 1:

01 0

1 1 1

1 0 0

Это то, что у меня есть в моей консоли, но должно быть только три - средняя вершина и левая и правая вв среднем ряду я использовал отладчик и обнаружил, что когда он проверяет мое среднее значение в среднем ряду, он по какой-то причине считает значение в верхнем правом углу живым, даже если он проходит через оба оператора if и яне знаю, почему живая переменная оказывается равной трем для этого места в середине среднего ряда, меняя его на единицу, этот код может быть ужасным, кстати, я 'Я довольно новичок в этом деле.Я надеюсь, что предоставил достаточно подробностей, просто спросите обо всем, что вам нужно знать, чтобы помочь ему.

...