我正在创建一个用于java棋盘游戏的引擎,我想创建一个方法来计算每个玩家留下的项目数量,这是我的代码:
public class ChessBoard
{
private boolean belongsToPlayer(char piece, int player)
{
if (player == 0 && Character.isUpperCase(piece))
return true;
if (player == 1 && Character.isLowerCase(piece))
return true;
return false;
}
final public int getCount(final String[] board, final int player) {
int count = 0;
int size = board.length;
for (int i = 1; i < size; i++) {
for (int j = 1; j < size; j++) {
if (belongsToPlayer(board[i].charAt(j), player)) {
count++;
}
}
}
return count;
}
}
但问题是我的字符串索引超出范围@ if (belongsToPlayer(board[i].charAt(j), player))
有谁知道如何解决这个问题?
答案 0 :(得分:1)
board[i]
的长度明显短于size
。如果您的意图是循环遍历字符串的每个字符,请将循环更改为:
for (int j = 0; j < board[i].length(); j++) {
if (belongsToPlayer(board[i].charAt(j), player)) {
count++;
}
}
答案 1 :(得分:1)
这一行
if (belongsToPlayer(board[i].charAt(j), player))
表示board
中的字词长度与board
的字号相同。如果单词实际上较小,您将尝试使用charAt
在单词中找到不可用的索引。
答案 2 :(得分:0)
Java是零索引的,因此数组中的第一个元素(以及String中的第一个字符)的索引为0,而不是1.从0到长度迭代 - 。
你还在1之间迭代一个字符串(参见上面为什么这是不正确的)和你的size
变量,这是board
数组的长度。除非它们在所有情况下的长度相同,否则您可能也会遇到索引问题。
答案 3 :(得分:0)
我认为你的j循环不正确
for(int j = 1; j < board[i].length(); j++){