java方法中的字符串索引超出范围错误

时间:2012-03-09 18:41:37

标签: java eclipse

我正在创建一个用于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)) 有谁知道如何解决这个问题?

4 个答案:

答案 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++){