【发布时间】:2022-01-05 21:35:55
【问题描述】:
我一直在做创建一个简单的国际象棋程序的作业。
棋盘是一个二维数组,命名为board。这些片段都是像 R、Q、K 这样的单个字符,空白处用 ' ' 字符填充,所以是空格。
public static char[][] board;
get 方法应该返回 char 或坐标 (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 '\0';
}
问题是我评估谁是获胜者的程序没有按预期工作。
这个程序检查每支球队的国王是否还在棋盘中,所以是棋盘数组。
如果两者都还活着,它应该返回 0,如果只有白色的国王还活着,它应该返回 1,如果只有黑色的国王还活着,它应该返回 2。
我已经制作了一个程序,或者至少尝试过制作一个程序,它遍历每个坐标并检查是否有一个字符“K”代表白国王,以及“S”代表黑国王。
我已将布尔 kingIsAlive 设置为 false,因此如果在数组中没有找到 K 或 S,则它仍然为 false。
虽然,我在底部的代码,以及返回 0,1 或 2 的 if 和 else 存在错误,即 kingWhiteIsAlive 始终为 false 并且 kingBlackIsAlive 始终为 false。强>
所以,我认为我将 kingIsAlive 布尔值变为 true 的程序根本不起作用....
我得到的错误是:
白方本应赢 => 预期: 但结果:
没有人应该赢=>预期:但是是:
经过几个小时的尝试,我放弃了,决定在这里问。
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 表示两队都没有国王的测试用例。
【问题讨论】:
-
它对我有用。
board定义是否正确,您在哪里定义它? -
您的代码在我看来应该可以工作。也许您的
board数组没有存储您认为应该存储的内容。我建议使用调试器逐步完成此操作,以了解发生了什么。
标签: java for-loop multidimensional-array chess