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,但是这没有提供任何内容。
答案 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;
}
}
}