在二维数组中表示索引的更简单方法
Easier way to represent indicies in a 2D array
我是编程新手,我创建了一个简单的 井字棋 游戏。它输入了二维数组的行和列。但是,我想让它更简单,并使用 1-9
的值来表示板上的每个方块。
我解决这个问题的方法似乎相当漫长和复杂。抱歉格式错误,因为我想保存 space。
if (pos >= 0 && pos <= 9) { //checks if number is a valid position on the board
if (pos == 1 && board[0][0] == ' ') { board[0][0] = xo; return true; }
if (pos == 2 && board[0][1] == ' ') { board[0][1] = xo; return true; }
if (pos == 3 && board[0][2] == ' ') { board[0][2] = xo; return true; }
if (pos == 4 && board[1][0] == ' ') { board[1][0] = xo; return true; }
if (pos == 5 && board[1][1] == ' ') { board[1][1] = xo; return true; }
if (pos == 6 && board[1][2] == ' ') { board[1][2] = xo; return true; }
if (pos == 7 && board[2][0] == ' ') { board[2][0] = xo; return true; }
if (pos == 8 && board[2][1] == ' ') { board[2][1] = xo; return true; }
if (pos == 9 && board[2][2] == ' ') { board[2][2] = xo; return true; }
}
return false;
内部 if 语句检查索引是否为空,然后根据输入的数字分配 x
或 o
。如果有人知道任何 'cleaner' 和更简单的方法,我们将不胜感激。
这种东西用数组就方便多了。我会做这样的事情:
int p = 1;
for (int i = 0; i < 3; i++) {
for (int j = 0; i < 3; i++) {
if (p == pos && board[i][j] == ' ') {
board[i][j] = xo;
return true;
p += 1;
}
}
}
return false;
int count = 1; //value of pos
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
char ch = board[i][j]; //setting that board value to ch
if (pos == count && ch == ' ') {
board[i][j] = xo; //that board value becomes xo
return true; //returns true
}
count++;
}
}
return false;
Assignment, Arithmetic, and Unary Operators
/
- 除法运算符
%
- 余数运算符
你完全可以不用循环就得到单元格[i][j]
的坐标,只用一个变量pos
,范围从1
到9
:
public static boolean isValid(int pos, char xo) {
int i = (pos - 1) / 3; // row
int j = (pos - 1) % 3; // column
if (board[i][j] == ' ') {
board[i][j] = xo;
return true;
}
return false;
}
我是编程新手,我创建了一个简单的 井字棋 游戏。它输入了二维数组的行和列。但是,我想让它更简单,并使用 1-9
的值来表示板上的每个方块。
我解决这个问题的方法似乎相当漫长和复杂。抱歉格式错误,因为我想保存 space。
if (pos >= 0 && pos <= 9) { //checks if number is a valid position on the board
if (pos == 1 && board[0][0] == ' ') { board[0][0] = xo; return true; }
if (pos == 2 && board[0][1] == ' ') { board[0][1] = xo; return true; }
if (pos == 3 && board[0][2] == ' ') { board[0][2] = xo; return true; }
if (pos == 4 && board[1][0] == ' ') { board[1][0] = xo; return true; }
if (pos == 5 && board[1][1] == ' ') { board[1][1] = xo; return true; }
if (pos == 6 && board[1][2] == ' ') { board[1][2] = xo; return true; }
if (pos == 7 && board[2][0] == ' ') { board[2][0] = xo; return true; }
if (pos == 8 && board[2][1] == ' ') { board[2][1] = xo; return true; }
if (pos == 9 && board[2][2] == ' ') { board[2][2] = xo; return true; }
}
return false;
内部 if 语句检查索引是否为空,然后根据输入的数字分配 x
或 o
。如果有人知道任何 'cleaner' 和更简单的方法,我们将不胜感激。
这种东西用数组就方便多了。我会做这样的事情:
int p = 1;
for (int i = 0; i < 3; i++) {
for (int j = 0; i < 3; i++) {
if (p == pos && board[i][j] == ' ') {
board[i][j] = xo;
return true;
p += 1;
}
}
}
return false;
int count = 1; //value of pos
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
char ch = board[i][j]; //setting that board value to ch
if (pos == count && ch == ' ') {
board[i][j] = xo; //that board value becomes xo
return true; //returns true
}
count++;
}
}
return false;
Assignment, Arithmetic, and Unary Operators
/
- 除法运算符%
- 余数运算符
你完全可以不用循环就得到单元格[i][j]
的坐标,只用一个变量pos
,范围从1
到9
:
public static boolean isValid(int pos, char xo) {
int i = (pos - 1) / 3; // row
int j = (pos - 1) % 3; // column
if (board[i][j] == ' ') {
board[i][j] = xo;
return true;
}
return false;
}