如何搜索2D String数组 - Java

时间:2016-03-17 13:58:03

标签: java arrays multidimensional-array

public class someClass{
public String[][] board = new String[7][7];

public someClass(){
    for (int i = 0; i < board.length; i++) {
        for (int j = 0; j < board[i].length; j++) {
            board[i][j] = " ";
        }
    }
}

我在一个正在使用的课程中有这个,我正在努力寻找一种方法来搜索数组,看看特定单元格的左侧,右侧,上方或下方的单元格是空的还是填充的。

IE board[4][2] - 我如何通过数组查看位置[4] [1],[4] [3],[3] [2]和[5] [2]是否为空或者在其中有一个元素?

编辑:我试图使用嵌套的for循环来查看数组并从循环中的索引中减去1,但是这没有提供任何内容。

2 个答案:

答案 0 :(得分:1)

public class someClass{

    public String[][] board = new String[7][7];

    public List<Coordinates> findAdjacentCells(final String[][] board, final int x, final int y){
        List<Coordinates> result = new ArrayList<Coordinates>();

        if(x >= 1 && y >= 1) {
            if(y + 1 < board[x].length)
                result.put(new Coordinates(x, y + 1));
            if(y - 1 >= 0)
                result.put(new Coordinates(x, y -1));
            if(x + 1 < board.length)
                result.put(new Coordinates(x+1, y));
            if(x -1 >= 0)
                result.put(new Coordinates(x-1, y));
        }

        return result;
    }
        // Keep track of coordinates
        public class Coordinates {
            int positionX;

            int positionY;

            public Coordinates(int positionX, int positionY) {
                super();
                this.positionX = positionX;
                this.positionY = positionY;
        }

        public final int getPositionX() {
            return positionX;
        }

        public final int getPositionY() {
            return positionY;
        }
    }
}

您可以执行上述操作。我不知道你的电路板是否有位置0.显然阵列确实如此。所以你可能不得不改变一些条件。

编辑:您编辑了问题并添加了更多代码,这可能不再相关了。

答案 1 :(得分:1)

Above: [i][j - 1]
Below: [i][j + 1]
Before: [i - 1][j]
After: [i + 1][j]

请务必先检查是否有界限。 然后:

private boolean isInBounds(int i, int j) {
    return (board.length > 0 && i >= 0 && i < board.length && j >= 0 && j < board[i].length);
}

private boolean isAboveEmpty(int i, int j) { // This might be a little verbose...
    int newJ = j - 1;
    if(isInBounds(i, newJ)) 
        return board[i][newJ].equals(" "); //Above cell is empty
    return true; // out of bounds cells are always empty (or are they?)
}

然后重复其他方向。 也可以将board设为私有,并让用户使用set方法设置单元格,这样您就可以先进行检查。

public class Board {
    private String[][] board = new String[7][7];
    ...
    public void set(int i, int j, String value) {
        if(isInBounds(i, j) && isAboveEmpty(i, j) && isBelowEmpty(i, j) && isBeforeEmpty(i, j) && isAfterEmpty(i, j)) {
            board[i,j] = value;
        }
    }
}