Indexoutofboundsexception 当I';我已经检查了参数是否存在?

Indexoutofboundsexception 当I';我已经检查了参数是否存在?,indexoutofboundsexception,minecraft,bukkit,Indexoutofboundsexception,Minecraft,Bukkit,我通过这段代码获得了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>"); retur

我通过这段代码获得了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);
if(args.length==0){
p、 sendMessage(ChatColor.DARK_RED+“语法错误。语法正确:/mi addpower”);
返回;
}
字符串displayName=args[0];
如果(args.length==1){
p、 sendMessage(ChatColor.DARK_RED+“语法错误。语法正确:/mi addpower”);
返回;
}
//arg2是事件类型
试一试{
eventType=eventType.valueOf(args[1].toUpperCase());
}捕获(IllegalArgumentException e){
p、 sendMessage(ChatColor.RED+“这样的事件类型不存在!”);
返回;
}
如果(args.length==2){
p、 sendMessage(ChatColor.DARK_RED+“语法错误。语法正确:/mi addpower”);
返回;
}
//arg2是电源
Power Power=getPower(参数[2]);
if(幂==null){
p、 sendMessage(ChatColor.RED+“电源不存在!”);
返回;
}
向量a=新向量(Arrays.asList(args));
for(字符串:a){
p、 发送消息(字符串);
}
a、 移除(0);
a、 移除(1);
a、 移除(2)//当我试图删除第二个元素时,它会给我一个异常。
args=a.toArray(新字符串[a.size()]);
powerCommand(p,displayName,eventType,args);

我不明白为什么会这样?我检查参数是否存在,然后尝试删除它们,那么为什么会发生此错误?

remove
修改集合的计数,从而修改有效索引的范围

如果
args
的长度为3,则

Vector<String> a = new Vector<String>(Arrays.asList(args));
删除第一个元素,因此将计数更改为
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);

remove
减少集合的计数,从而减少有效索引的范围。这是什么意思?
String first = a.remove(0);
String second = a.remove(0);
String third = a.remove(0);