【发布时间】:2015-11-16 03:35:39
【问题描述】:
我排除了与问题无关的大部分代码。下面是 Bukkit 插件的代码——下面的所有内容都已定义。但是,当代码尝试通过第二个 if 语句(我尝试比较长度)时,它会抛出 ArrayIndexOutOfBoundsException。
我已经比较了exempt.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;
}
【问题讨论】:
-
你确定是那条线?
-
exempt[exempt.length]- 这永远不会有效。 -
exempt[exempt.length]按定义会失败。数组的索引编号为0到length-1,所以length太大了。 --- 与其他一些语言不同,Java 数组不能调整大小,因此它不会通过使用该结构而增长。要获得可调整大小的数组,请使用ArrayList。
标签: java indexoutofboundsexception minecraft bukkit