Замените мое утверждение продолжения другой логикой - PullRequest
0 голосов
/ 14 октября 2018
    do {
        const randX = randomNumberBetween(0, 9);
        const randY = randomNumberBetween(0, 9);
        if ((randX === x1 && randY === y1) || (randX === x2 && randY === y2)) {
            continue;
        }
        matrix[randX][randY] = 'Obstacle';
        placedBlocks += 1;
    } while (placedBlocks < blocks);
    matrix[x1][y1] = 'Start';
    matrix[x2][y2] = 'Goal';
    return matrix;
}

Мне нужно заменить мой оператор continue другой логикой, потому что мои правила ESLint не позволяют мне его использовать.

Вся моя задача - создать алгоритм поиска пути через матрицу с полями блокови все работает.Мне просто нужно заменить continue; чем-то другим.

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Ваша условная проверка в настоящее время проверяет, перекрывает ли пара координат randX и randY одну из двух точек.Вы можете инвертировать логику в своем коде, перемещая блок, который вы пропускаете, с помощью continue внутри if.

Инверсия заключается в проверке того, действительно ли randX и randY делают не перекрывают одну из двух точек, либо отрицая предыдущее условное, либо, что намного чище, переворачивая === на !== и && на ||:

do {
    const randX = randomNumberBetween(0, 9);
    const randY = randomNumberBetween(0, 9);

    if ((randX !== x1 || randY !== y1) && (randX !== x2 || randY !== y2)) {
        matrix[randX][randY] = 'Obstacle';
        placedBlocks += 1;
    }
} while (placedBlocks < blocks);

matrix[x1][y1] = 'Start';
matrix[x2][y2] = 'Goal';
return matrix;

Вотрабочая демонстрация логической эквивалентности:

const valid = (randX, randY, x1, x2, y1, y2) => 
  (randX !== x1 || randY !== y1) && 
  (randX !== x2 || randY !== y2)
;

const valid2 = (randX, randY, x1, x2, y1, y2) => 
  !((randX === x1 && randY === y1) || 
    (randX === x2 && randY === y2))
;

console.log(
  [
    [1, 1, 1, 1, 1, 1],
    [1, 1, 1, 2, 2, 2],
    [1, 1, 2, 1, 2, 2],
    [1, 1, 2, 2, 1, 2],
    [1, 1, 2, 2, 2, 1],
    [1, 1, 1, 1, 2, 2],
    [1, 1, 2, 2, 1, 1],
    [1, 1, 2, 1, 1, 2],
    [1, 1, 1, 2, 2, 1],
    [1, 1, 2, 2, 2, 2]
  ].map(e => valid(...e) === valid2(...e))
   .every(e => e)
);
0 голосов
/ 14 октября 2018

Вместо пропуска цикла в состоянии if, просто инвертируйте условие if и выполните работу внутри условия if,

do {
    const randX = randomNumberBetween(0, 9);
    const randY = randomNumberBetween(0, 9);
    if (!((randX === x1 && randY === y1) || (randX === x2 && randY === y2))) {
        matrix[randX][randY] = 'Obstacle';
        placedBlocks += 1;
    }
} while (placedBlocks < blocks);
    matrix[x1][y1] = 'Start';
    matrix[x2][y2] = 'Goal';
    return matrix;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...