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