我正在使用此代码获取IndexOutOfBoundsException,编码Minecraft Bukkit API:
if(args.length == 0){
p.sendMessage(ChatColor.DARK_RED + "Wrong syntax. Correct syntax: /mi addpower <Name Identifier of Item> <Power> <EventType>");
return;
}
String displayName = args[0];
if(args.length == 1){
p.sendMessage(ChatColor.DARK_RED + "Wrong syntax. Correct syntax: /mi addpower <Name Identifier of Item> <Power> <EventType>");
return;
}
//Arg 2 is eventtype
try {
eventType = EventType.valueOf(args[1].toUpperCase());
}catch(IllegalArgumentException e){
p.sendMessage(ChatColor.RED + "Such an EventType does not exist!");
return;
}
if(args.length == 2){
p.sendMessage(ChatColor.DARK_RED + "Wrong syntax. Correct syntax: /mi addpower <Name Identifier of Item> <Power> <EventType>");
return;
}
//Arg 2 is power
Power power = getPower(args[2]);
if (power == null) {
p.sendMessage(ChatColor.RED + "That power does not exist!");
return;
}
Vector<String> a = new Vector<String>(Arrays.asList(args));
for(String string : a){
p.sendMessage(string);
}
a.remove(0);
a.remove(1);
a.remove(2); //When I try to remove the second element it gives me the exception.
args = a.toArray(new String[a.size()]);
power.powerCommand(p, displayName, eventType, args);
我不明白为什么会发生这种情况?我检查参数是否存在,然后尝试删除它们,那么为什么会出现这个错误呢?
答案 0 :(得分:0)
remove
修改集合的计数,从而修改有效索引的范围。
如果args
的长度为3,那么
Vector<String> a = new Vector<String>(Arrays.asList(args));
使用有效索引0,1和2创建长度为3的向量。
a.remove(0);
删除第一个元素,因此将计数更改为2
。有效索引现在为0和1。
a.remove(1);
删除集合的第二个元素(注意这是args
中的第三个元素而不是第二个元素)。 a
的计数现在为1,因此0是唯一有效的索引。
a.remove(2);
因索引超出范围而抛出异常。
如果您想删除可以使用的前三个元素:
String first = a.remove(0);
String second = a.remove(0);
String third = a.remove(0);