检查 char 是否在 java 中的二维数组中
Check if a char is in a 2D array in java
我一直在做创建一个简单的国际象棋程序的作业。
棋盘是一个二维数组,命名为board。这些片段都是单个字符,如 R、Q、K,空 space 填充了 ' ' 字符,因此 space.
public static char[][] board;
方法 get 应该 return 字符或坐标 (x,y) 上的任何内容。
public char get(int x, int y) {
if(x < board[0].length && x >= 0 && y < board.length && y >= 0){
return board[x][y];
}
else
return '[=12=]';
}
问题是我的评估谁是赢家的程序没有按预期工作。
这个程序检查每队的王是否还在棋盘中,所以棋盘数组。
它应该return0 如果两个都还活着,1,如果只有白王还活着,2 如果只有黑王还活着。
我编写了一个程序,或者至少尝试编写了一个程序,它遍历每个坐标并检查是否有代表白王的字符 'K',以及 'S',黑王.
我已将布尔值 kingIsAlive 设置为 false,这样如果在数组中找不到 K 或 S,它仍然是 false。
不过,我的代码在底部,带有 if 和 else returns 0,1 or2,有错误,kingWhiteIsAlive 总是 false 并且kingBlackIsAlive 始终为 false。
所以,我认为我将 kingIsAlive 布尔值变为 true 的程序根本不起作用....
我得到的错误是:
白方本应赢 => 预期:<1> 但实际是:<-1>
没有人应该赢 => 预期:<0> 但是:<1>
经过几个小时的尝试,我放弃了,决定在这里提问。
public int decideWinner(){
boolean kingWhiteIsAlive = false;
boolean kingBlackIsAlive = false;
for(int y = 0; y < board.length;y++){
for(int x = 0;x < board[0].length;x++){
if(get(x,y) == 'K'){
kingWhiteIsAlive = true;
}
}
}
for(int j = 0; j < board.length;j++){
for(int i = 0;i < board[0].length;i++){
if(get(i,j) == 'S'){
kingBlackIsAlive = true;
}
}
}
if(kingWhiteIsAlive && kingBlackIsAlive){
return 0;
}
else if(kingWhiteIsAlive && !kingBlackIsAlive){
return 1;
}
else if(!kingWhiteIsAlive && kingBlackIsAlive){
return 2;
}
else
return -1;
}
return -1 用于测试两队都没有国王的情况。
我已经测试了你的代码,它 运行 完美,也许问题出在你的电路板初始化上?
尝试通过在 decideWinner
函数开头显示数组的实际内容来调试您的代码。
我已经对开发板使用了这个初始化,如果它可能有帮助的话。
public void initBoard() {
board = new char[8][8];
// Init pawns
for (int j = 0; j < board.length; j++) {
board[j][1] = 'P';
board[j][6] = 'P';
}
// Rooks
board[0][0] = 'R';
board[7][0] = 'R';
board[0][7] = 'R';
board[7][7] = 'R';
// Knights
board[1][0] = 'N';
board[6][0] = 'N';
board[1][7] = 'N';
board[6][7] = 'N';
// Bishops
board[2][0] = 'B';
board[5][0] = 'B';
board[2][7] = 'B';
board[5][7] = 'B';
// Queens
board[3][0] = 'Q';
board[4][7] = 'Q';
// Kings
board[4][0] = 'K'; // White
board[3][7] = 'S'; // Black
// Empty space
for (int y = 0; y < board.length; y++) {
for (int x = 2; x < 6; x++) {
board[y][x] = ' ';
}
}
}
如果找到国王,则需要中断搜索。您可以通过 break
语句来完成。
for(int y = 0; y < board.length;y++){
for(int x = 0;x < board[0].length;x++){
if(get(x,y) == 'K'){
kingWhiteIsAlive = true;
break;
}
}
}
for(int j = 0; j < board.length;j++){
for(int i = 0;i < board[0].length;i++){
if(get(i,j) == 'S'){
kingBlackIsAlive = true;
break;
}
}
}
我一直在做创建一个简单的国际象棋程序的作业。
棋盘是一个二维数组,命名为board。这些片段都是单个字符,如 R、Q、K,空 space 填充了 ' ' 字符,因此 space.
public static char[][] board;
方法 get 应该 return 字符或坐标 (x,y) 上的任何内容。
public char get(int x, int y) {
if(x < board[0].length && x >= 0 && y < board.length && y >= 0){
return board[x][y];
}
else
return '[=12=]';
}
问题是我的评估谁是赢家的程序没有按预期工作。
这个程序检查每队的王是否还在棋盘中,所以棋盘数组。
它应该return0 如果两个都还活着,1,如果只有白王还活着,2 如果只有黑王还活着。
我编写了一个程序,或者至少尝试编写了一个程序,它遍历每个坐标并检查是否有代表白王的字符 'K',以及 'S',黑王.
我已将布尔值 kingIsAlive 设置为 false,这样如果在数组中找不到 K 或 S,它仍然是 false。
不过,我的代码在底部,带有 if 和 else returns 0,1 or2,有错误,kingWhiteIsAlive 总是 false 并且kingBlackIsAlive 始终为 false。
所以,我认为我将 kingIsAlive 布尔值变为 true 的程序根本不起作用....
我得到的错误是:
白方本应赢 => 预期:<1> 但实际是:<-1>
没有人应该赢 => 预期:<0> 但是:<1>
经过几个小时的尝试,我放弃了,决定在这里提问。
public int decideWinner(){
boolean kingWhiteIsAlive = false;
boolean kingBlackIsAlive = false;
for(int y = 0; y < board.length;y++){
for(int x = 0;x < board[0].length;x++){
if(get(x,y) == 'K'){
kingWhiteIsAlive = true;
}
}
}
for(int j = 0; j < board.length;j++){
for(int i = 0;i < board[0].length;i++){
if(get(i,j) == 'S'){
kingBlackIsAlive = true;
}
}
}
if(kingWhiteIsAlive && kingBlackIsAlive){
return 0;
}
else if(kingWhiteIsAlive && !kingBlackIsAlive){
return 1;
}
else if(!kingWhiteIsAlive && kingBlackIsAlive){
return 2;
}
else
return -1;
}
return -1 用于测试两队都没有国王的情况。
我已经测试了你的代码,它 运行 完美,也许问题出在你的电路板初始化上?
尝试通过在 decideWinner
函数开头显示数组的实际内容来调试您的代码。
我已经对开发板使用了这个初始化,如果它可能有帮助的话。
public void initBoard() {
board = new char[8][8];
// Init pawns
for (int j = 0; j < board.length; j++) {
board[j][1] = 'P';
board[j][6] = 'P';
}
// Rooks
board[0][0] = 'R';
board[7][0] = 'R';
board[0][7] = 'R';
board[7][7] = 'R';
// Knights
board[1][0] = 'N';
board[6][0] = 'N';
board[1][7] = 'N';
board[6][7] = 'N';
// Bishops
board[2][0] = 'B';
board[5][0] = 'B';
board[2][7] = 'B';
board[5][7] = 'B';
// Queens
board[3][0] = 'Q';
board[4][7] = 'Q';
// Kings
board[4][0] = 'K'; // White
board[3][7] = 'S'; // Black
// Empty space
for (int y = 0; y < board.length; y++) {
for (int x = 2; x < 6; x++) {
board[y][x] = ' ';
}
}
}
如果找到国王,则需要中断搜索。您可以通过 break
语句来完成。
for(int y = 0; y < board.length;y++){
for(int x = 0;x < board[0].length;x++){
if(get(x,y) == 'K'){
kingWhiteIsAlive = true;
break;
}
}
}
for(int j = 0; j < board.length;j++){
for(int i = 0;i < board[0].length;i++){
if(get(i,j) == 'S'){
kingBlackIsAlive = true;
break;
}
}
}