IndexOutOfBoundsEception 当我已经检查了参数是否存在时?

IndexOutOfBoundsEception when I've already checked if the arguments are there?

我收到此代码的 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);

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

remove 修改集合的计数,因此修改有效索引的范围。

如果 args 的长度为 3 则

Vector<String> a = new Vector<String>(Arrays.asList(args));

创建一个长度为 3 且有效索引为 0,1 和 2 的向量。

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);