Соседи сенсора в двумерном массиве символов - PullRequest
0 голосов
/ 23 сентября 2018

У меня возникают проблемы при попытке выяснить, как кодировать сенсорную программу для символов, в основном из-за переменной с именем 'loc'.API был полезен, но поскольку переменная сосредоточена вокруг Location.java и его методов, которые в основном имеют переменную, представляющую (row, col), я наталкиваюсь на кирпичную стену о том, как затем представлять строку / col индивидуально.Я теоретически знаю, как выполнить тест соседей в двумерном массиве, так как в прошлом я выполнял программу MineSweeper, но мне не разрешено изменять здесь какие-либо переменные.Ниже приводится подсказка для этой части проблемы, код местоположения и имя метода для одной из подсказок.Мне не разрешено кодировать остальную часть проблемы без выполнения этой части.Любая помощь будет принята с благодарностью.Спасибо!

"Напишите метод датчика, который принимает двумерный массив символов, местоположение, которое задает индексы строки и столбца, и символ и возвращает логическое значение, если этот символ найден в любом из четырех соседей.заданной координаты (строка, столбец). Рассмотрим массив 6x5:

r\c# 0 | 1 | 2 | 3 | 4 |
===#===|===|===|===|===|
 0 #   |   |   |   |   |
 1 #   |   |   |   |   |
 2 #   | i | b | j |   |
 3 #   | a | x | c |   |
 4 #   | l | d | k |   |
 5 #   |   |   |   |   |

Например, заданное расположение (3,2) для строки = 3, столбца = 2 (как отмечено 'x'), символы a, b, c и d считаются соседями в координатах (3,1), (2,3), (3,3) и (4,2) соответственно. Символы i, j, k, lне считаются соседями по диагонали.

Таким образом, учитывая вышеуказанную матрицу и loc = (3,2), вызов «sensor (matrix, loc, 'a')» вернет true, тогда как «sensor(matrix, loc, 'j') "вернул бы" false ". То есть" a "является соседом" x ", но" j "по диагонали не считается соседом для этой модели."

public static boolean sensor(char[][] world, Location loc, char test)

Location.java:

/**
 * @class This class holds the cell indices (row, column) for a 2D array
 */

import java.util.Random;

public class Location {
/** row of the array */
public int row;

/** column of the array */
public int col;

/** Private instance of random number generator */
private static Random rand = new Random();

/** Construct location at (0, 0) */
public Location() {
    row = 0;
    col = 0;
}

/**
 * Copy constructor
 *
 * @param loc
 *            location to copy
 */
public Location(Location loc) {
    row = loc.row;
    col = loc.col;
}

/**
 * Construct location at given coordinates
 *
 * @param i
 *            i^th row
 * @param j
 *            j^th column
 */
public Location(int i, int j) {
    row = i;
    col = j;
}

/**
 * Construct location at random point within max width (w) and height (h)
 *
 * @param height
 *            = height (number of rows)
 * @param width
 *            = width (number of columns)
 * @param random
 *            boolean flag to generated a random number otherwise (0,0)
 */
public Location(int height, int width, boolean random) {

    if (random) {
        row = rand.nextInt(height);
        col = rand.nextInt(width);
    }

}

/**
 * formatted string that shows the row and column data
 *
 * @return formatted String
 */
@Override
public String toString() {
    return String.format("(% 2d, % 2d)", row, col);
}

/**
 * Compare two locations
 *
 * @param loc
 * @return true if row and col values are equal, false otherwise
 */
@Override
public boolean equals(Object loc) {
    if (loc == null) {
        return false;
    }

    if (loc.getClass() != getClass()) {
        return false;
    }

    Location loc2 = (Location) loc;
    return (loc2.row == row) && (loc2.col == col);
}

/**
 * Clones existing location and creates a new instance
 *
 * @return reference to the new instance
 */
@Override
public Location clone() {
    return new Location(row, col);

}

}

...