Почему мой цикл for не принимает правильную ошибку? - PullRequest
0 голосов
/ 05 марта 2019

У меня есть сетка, и у меня есть функция-член Move (int), которая должна перемещать значок движителя в любом направлении, к которому он в данный момент обращен, с количеством пробелов.Если где-либо перед двигателем, куда он хочет перейти, есть символ блока ('#'), функция должна завершиться сбоем и оставить курсор в правильном месте.Кажется, что оператор bool всегда приравнивается к true, но я не могу найти, где в моем коде.

В моем примере выходных данных функция перемещения никогда не дает сбой, движитель всегда, кажется, проходит сквозь стены или заменяет стены.

Я не буду публиковать все 4 направления, но я опубликую север и запад:

bool Grid::Move(int s) {
bool canMove = true;  //initialize the bool variable
if (direction == NORTH) {
    if ((mRow - s) >= 0) {
        for (int i = mRow; i >= (mRow - s); i--) {
            if (matrix[i][mCol] == '#') {
                canMove = false;
            } else if (matrix[i][mCol] != '#') {
                canMove = true;
            }
        }
        if (canMove == true) {
            matrix[mRow][mCol] = '.';
            mRow = (mRow - s);
            matrix[mRow][mCol] = '^';
            return true;
        }else{
            matrix[mRow][mCol] = '^';
        }
    } else
        return false;
} else if (direction == WEST) {
    if ((mCol - s) >= 0) {
        for (int i = mCol; i >= (mCol - s); i--){
            if (matrix[mRow][i] == '#'){
                canMove = false;
            } else if (matrix[mRow][i] != '#')
                canMove = true;
        }
        if (canMove == true) {
            matrix[mRow][mCol] = '.';
            mCol = (mCol - s);
            matrix[mRow][mCol] = '<';
            return true;
        }else
            matrix[mRow][mCol] = '<';
    }else
        return false;
} 

1 Ответ

1 голос
/ 05 марта 2019

Вы устанавливаете canMove на каждой итерации вашего цикла.Независимо от того, какое значение он получит в последний раз, будет значением, которое он будет иметь.

Поскольку цель состоит в том, чтобы увидеть, действительно ли это движение в течение всей продолжительности, вам не нужно устанавливать canMove вtrue потому что как только оно становится ложным, оно должно оставаться таким.(И вы можете break выйти из цикла, когда это произойдет.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...