Array.length& ArrayIndexOutOfBoundsException异常

时间:2015-11-16 03:35:39

标签: java indexoutofboundsexception minecraft bukkit

我排除了与问题无关的大部分代码。下面是Bukkit插件的代码 - 下面的所有内容都已定义。但是,当代码尝试通过第二个if语句(我尝试比较长度)时,它会抛出ArrayIndexOutOfBoundsException

我已将exempt.length0进行了比较并打印了结果,该结果为true,因此我不确定为什么比较会产生错误。

public Player[] exempt = { }; // If exempt is defined as a new Player[100], it will result in NullPointerException.

if (args[0].equalsIgnoreCase("toggle")) {
    boolean isExempt = false;

    if (exempt.length > 0) {
        for (Player player : exempt) {
            if (player.getName().equals(commandSender.getName())) {
                isExempt = true;
            }
        }
    }

    if (!isExempt) {
        exempt[exempt.length] = (Player) commandSender; // ArrayIndexOutOfBoundsException
    }

    commandSender.sendMessage(ChatColor.GREEN + "Toggled receiving AdminChat to " + (!isExempt ? "true" : "false") + ".");
    return true;
}

2 个答案:

答案 0 :(得分:1)

您无法访问exempt[exempt.length].

因为索引从0分配到exempt.length-1。

更重要的是,该行也应位于“if(exempt.length> 0)”块内,因为当数组为空时它也会产生异常。因为exempt.length == 0,但是exempt.length == -1

感谢Aimert的建议。

答案 1 :(得分:0)

所以我没有使用数组,而是按照建议使用了列表。

List<Player> exempt = new ArrayList<Player>;

在纠正所有代码(从Array更新为ArrayList方法等等)后,它就像一个魅力。