Java 数组长度&;数组下标越界异常

Java 数组长度&;数组下标越界异常,java,indexoutofboundsexception,minecraft,bukkit,Java,Indexoutofboundsexception,Minecraft,Bukkit,我排除了与问题无关的大部分代码。下面是Bukkit插件的代码——下面的所有内容都已定义。但是,当代码尝试执行第二个if语句时(我尝试在其中比较长度),它会抛出ArrayIndexOutOfBoundsException 我已经将emption.length与0进行了比较,并打印了结果,结果为true,因此我不确定为什么比较会产生错误 public Player[] exempt = { }; // If exempt is defined as a new Player[100], it wil

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

我已经将
emption.length
0
进行了比较,并打印了结果,结果为
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;
}

您无法访问
export[export.length]。

因为索引是从0分配到0.length-1的

此外,该行还应该位于“if(emplot.length>0)”块内,因为当数组为空时,它也会给出一个异常。因为export.length==0,但export.length==1


谢谢艾默特的建议。

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

列表豁免=新的ArrayList


在更正了所有代码(将其从Array更新为ArrayList方法等)之后,它就像一个符咒一样工作。

你确定它就是那一行吗?
empt[empt.length]
-这永远都是无效的。
empt[empt.length]
根据定义将失败。数组的索引编号为
0
length-1
,因此
length
太大。--与其他一些语言不同,Java数组不能调整大小,因此它不会通过使用该结构而增长。若要获得可调整大小的数组,请使用
ArrayList
。该行还应位于“if(employ.length>0)”块内,因为当数组为空时,它也会给出一个异常。@Aimert好的,我理解我的错误,部分原因是你们两个。当我将其定义为
publicplayer[]豁免=新玩家[100],以100为例,然后它变为NullPointerException。它表示100个元素。不会有索引为100的元素。因为您已经分配了内存空间,但没有填充它指向的对象的地址。因此,这会导致NullPointerException。请将每个元素初始化为一个新的玩家,或者指向一些已经存在的玩家。你从哪里得到NullPointerException?