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