Попытка проверить все смежные в матрице

Alexa A спросил: 03 февраля 2018 в 12:04 в: java

Мне было интересно, был ли более простой способ сделать это? Проект требует, чтобы я написал этот метод, который использует другой метод, который возвращает логическое значение true или false, если там есть сокровище. Я отклонил этот метод, но теперь он хочет, чтобы я написал метод, который возвращает, сколько сокровищ находится рядом (во всех направлениях) до заданного места в строке и столбце. Я наметил это на листе бумаги и вышел с этим. Но я чувствую, что повторяю код, но я не понимаю другого способа, который мог бы удовлетворить это состояние. Я бы хотел, чтобы он был более сжатым ... Я думал, что для петель? Но есть два условия, которые не будут работать в цикле for.

    //precondition: 0<=row<rows in map and 0<=col<cols in map
//postcondition: returns a count of the number of treasures in the cells adjacent to the location row,col 
//horizontally, vertically, and diagonally.  
public int numAdjacent(int row, int col) {
    if(hasTreasure(row,col)) {
        return -1;
    }    int numOfTreasure = 0;
    if ((0<=row && row < mapHeight()) && (0<=col && col < mapWidth())) {
        if(hasTreasure(row - 1,col - 1)) {
            numOfTreasure++;
        }
    }
    if (0<=row && row < mapHeight()) {
        if(hasTreasure(row - 1,col)) {
            numOfTreasure++;
        }
    }
    if ((0<=row && row < mapHeight()) && 0<=col && col < mapWidth()) {
        if(hasTreasure(row - 1,col + 1)) {
            numOfTreasure++;
        }
    }
    if (0<=row && row < mapHeight()) {
        if(hasTreasure(row + 1,col)) {
            numOfTreasure++;
        }
    }
    if ((0<=row && row < mapHeight()) && 0<=col && col < mapWidth()) {
        if(hasTreasure(row + 1,col + 1)) {
            numOfTreasure++;
        }
    }
    if ((0<=row && row < mapHeight()) && 0<=col && col < mapWidth()) {
        if(hasTreasure(row + 1,col - 1)) {
            numOfTreasure++;
        }
    }
    if (0<=col && col < mapWidth()) {
        if(hasTreasure(row,col + 1)) {
            numOfTreasure++;
        }
    }
    if (0<=col && col < mapWidth()) {
        if(hasTreasure(row,col - 1)) {
            numOfTreasure++;
        }
    }
    return numOfTreasure;
}

0 ответов