如何搜索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;
}
}
}