Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查索引是否已被占用?_Java_Arrays - Fatal编程技术网

Java 如何检查索引是否已被占用?

Java 如何检查索引是否已被占用?,java,arrays,Java,Arrays,我正在开发一个使用2D数组的棋盘游戏程序。因为在棋盘游戏中,你可以把你的石头放进一个已经有石头的格子里。Java中是否有方法检查索引是否已被占用?比如说, int[][] board = new int[5][5]; 我想检查用户或程序是否已经选择了单元格[1][3],并使用while循环告诉用户选择另一个尚未选择的单元格?我将创建一个具有布尔属性的对象,并使用它创建一个数组。 例如: 用法: public class main{ private myField[][] board =

我正在开发一个使用2D数组的棋盘游戏程序。因为在棋盘游戏中,你可以把你的石头放进一个已经有石头的格子里。Java中是否有方法检查索引是否已被占用?比如说,

int[][] board = new int[5][5];

我想检查用户或程序是否已经选择了
单元格[1][3]
,并使用while循环告诉用户选择另一个尚未选择的单元格?

我将创建一个具有布尔属性的对象,并使用它创建一个数组。 例如:

用法:

public class main{
    private myField[][] board = new myField[5][5];
    ....
}
检查是否有人占用:

if(board[1][3].chosen == true)
{
    //doSomething
}

看看这个Java小示例。它对空方块使用值
0
,对边框字段使用值
1
。这也简化了跨境检查。该板的大小为10x12个字段


其他值大致表示材质值-白色为正值,黑色为负值。因此,如果两个对手拥有相同的片段,那么平衡点是
0

Java将对象数组初始化为null,int初始化为0,float初始化为0.0,boolean初始化为false,因此您可以检查索引是否等于0。i、 e

if(board[x][y]==0){
//set piece
}else{
//handle already occupied case
}

您应该定义一个未使用的单元格,例如:

boolean[][] initMap(int x, int y) {
   boolean[][] result = new boolean[x][y];
}

boolean isOccupied(int[][] map, int x, int y) {
  return map[x][y]; 
}

boolean putARock(boolean[][] map, int x, int y) {
   if(isOccupied(map)) {
      map[x][y] = true;
      return true;
   } else {
      return false;
   } 
}

/* somewhere in main or GUI code */

boolean[][] map = initMap(x,y);

boolean isPuttingDone = false;

do {
  isPuttingDone = putARock(map, getXFromKeyboard(), getYFromKeyboard());
} while (!isPuttingDone);

您必须编写一个正确的方法来从用户输入中获取X和Y(或者您可以采用不同的方法)。但这并不是真正的OO代码。

如果可以的话,用特殊值标记所有单元格,例如,-1。然后只需检查board[1][3]=-1,如果是的话,它是免费的,否则它就被占用了。必须为所选的
创建一个getter,或者将其设置为
public
,我知道。我只是想节省时间。您可以选择布尔[5][5],并在开始时将它们全部标记为false。
boolean
变量的默认值为
false
,因此布尔数组将自动正确初始化。是的,但您可以使用对象添加信息(就像上面的数字一样,如果场地触发了一个动作,如果场地上的玩家增加了硬币……马里奥队:D)
boolean[][] initMap(int x, int y) {
   boolean[][] result = new boolean[x][y];
}

boolean isOccupied(int[][] map, int x, int y) {
  return map[x][y]; 
}

boolean putARock(boolean[][] map, int x, int y) {
   if(isOccupied(map)) {
      map[x][y] = true;
      return true;
   } else {
      return false;
   } 
}

/* somewhere in main or GUI code */

boolean[][] map = initMap(x,y);

boolean isPuttingDone = false;

do {
  isPuttingDone = putARock(map, getXFromKeyboard(), getYFromKeyboard());
} while (!isPuttingDone);