如何搜索2D字符串数组-Java 公共类someClass{ 公共字符串[][]board=新字符串[7][7]; 公共类(){ 对于(int i=0;i=1){ 如果(y+1=0) 结果.put(新坐标(x,y-1)); if(x+1=0) 结果put(新坐标(x-1,y)); } 返回结果; } //跟踪坐标 公共类坐标{ int-positionX; 内部位置; 公共坐标(内部位置X、内部位置Y){ 超级(); 此位置x=位置x; 这个位置y=位置y; } 公共最终int getPositionX(){ 返回位置X; } 公共最终int getPositionY(){ 返回位置; } } }

如何搜索2D字符串数组-Java 公共类someClass{ 公共字符串[][]board=新字符串[7][7]; 公共类(){ 对于(int i=0;i=1){ 如果(y+1=0) 结果.put(新坐标(x,y-1)); if(x+1=0) 结果put(新坐标(x-1,y)); } 返回结果; } //跟踪坐标 公共类坐标{ int-positionX; 内部位置; 公共坐标(内部位置X、内部位置Y){ 超级(); 此位置x=位置x; 这个位置y=位置y; } 公共最终int getPositionX(){ 返回位置X; } 公共最终int getPositionY(){ 返回位置; } } },java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,在我正在使用的一个类中,我正在努力寻找一种方法来搜索数组,看看某个特定单元格的左、右、上、下单元格是空的还是满的 即线路板[4][2]-我如何查看阵列中的位置[4][1]、[4][3]、[3][2]和[5][2]是否为空或其中是否有元素 编辑:我尝试使用嵌套for循环查看数组,并从循环中的索引中减去1,但这没有提供任何结果。public class someClass{ public class someClass{ public String[][] board = new String[7]

在我正在使用的一个类中,我正在努力寻找一种方法来搜索数组,看看某个特定单元格的左、右、上、下单元格是空的还是满的

线路板[4][2]
-我如何查看阵列中的位置[4][1]、[4][3]、[3][2]和[5][2]是否为空或其中是否有元素

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

public class someClass{
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] = " ";
        }
    }
}
公共字符串[][]board=新字符串[7][7]; 公共列表findAdjacentCells(最终字符串[][]板,最终整数x,最终整数y){ 列表结果=新建ArrayList(); 如果(x>=1&&y>=1){ 如果(y+1<电路板[x].长度) 结果.put(新坐标(x,y+1)); 如果(y-1>=0) 结果.put(新坐标(x,y-1)); if(x+1<电路板长度) 结果.put(新坐标(x+1,y)); 如果(x-1>=0) 结果put(新坐标(x-1,y)); } 返回结果; } //跟踪坐标 公共类坐标{ int-positionX; 内部位置; 公共坐标(内部位置X、内部位置Y){ 超级(); 此位置x=位置x; 这个位置y=位置y; } 公共最终int getPositionX(){ 返回位置X; } 公共最终int getPositionY(){ 返回位置; } } }
你可以像上面那样做。我不知道你的板是否有位置0。显然数组有。所以你可能需要改变一些周围的条件

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

public class someClass{
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;
        }
    }
}
公共字符串[][]board=新字符串[7][7]; 公共列表findAdjacentCells(最终字符串[][]板,最终整数x,最终整数y){ 列表结果=新建ArrayList(); 如果(x>=1&&y>=1){ 如果(y+1<电路板[x].长度) 结果.put(新坐标(x,y+1)); 如果(y-1>=0) 结果.put(新坐标(x,y-1)); if(x+1<电路板长度) 结果.put(新坐标(x+1,y)); 如果(x-1>=0) 结果put(新坐标(x-1,y)); } 返回结果; } //跟踪坐标 公共类坐标{ int-positionX; 内部位置; 公共坐标(内部位置X、内部位置Y){ 超级(); 此位置x=位置x; 这个位置y=位置y; } 公共最终int getPositionX(){ 返回位置X; } 公共最终int getPositionY(){ 返回位置; } } }
你可以像上面那样做。我不知道你的板是否有位置0。显然数组有。所以你可能需要改变一些周围的条件

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

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;
        }
    }
}
只需确保首先检查出界。 然后:

只需确保首先检查出界。 然后:



你尝试过吗?从第一个或第二个索引中添加或减去一个。简单的数学就可以了。是的,应该提到对不起。我最初尝试过嵌套for循环,并查看ai I-1和j-1等,但是没有显示任何内容。后期编辑你可以发布那些嵌套for循环吗?你尝试过吗?从第一个或第二个索引中添加或减去一个第二个索引。简单的数学就可以了。是的,我应该提到对不起。我最初尝试嵌套for循环,并查看ai I-1和j-1等,但是没有显示任何内容。POST Edited你能发布那些嵌套for循环吗?感谢你的输入,我确实看到你在那里做的大部分事情,ifs列表给出了一个“方法put(字符串)”类型列表未定义。我修复了它,我的意思是创建对象而不是添加数组。或者,不使用
坐标
类,您可以将
列表
设置为
列表
,然后执行
结果。put(board[x][y+1])
。这取决于您是否需要位置或位置内的内容。您的编辑说您正在进行比较,因此您可能只需要值而不是坐标。但是如果x或y=0,您将得到一个空列表,因此无法获得第一行/column单元格的相邻单元格。@jornverne您是对的。我们不知道@Topher如何处理p位置0。我怀疑如果它是某种类型的游戏板,角点是1,1。但是如果它是0,0,那么第一个条件检查
x>=1
将必须更改为
x>=0
。感谢您的输入,我确实看到了您在那里做的大部分事情,ifs列表给出了一个“方法put(字符串)”类型列表未定义。我修复了它,我的意思是创建对象而不是添加数组。或者,不使用
坐标
类,您可以将
列表
设置为
列表
,然后执行
结果。put(board[x][y+1])
。这取决于您是否需要位置或位置内的内容。您的编辑说您正在进行比较,因此您可能只需要值而不是坐标。但是如果x或y=0,您将得到一个空列表,因此无法获得第一行/column单元格的相邻单元格。@jornverne您是对的。我们不知道@Topher如何处理p位置0。我怀疑这是一个游戏板的某种角落我
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?)
}
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;
        }
    }
}