数组错误java.lang.ArrayIndexOutOfBoundsException:长度=1;索引=1
Array error java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
我有一个格式为 province;capital
的数组。
provArray = new String[] { "Alberta;Edmonton", "British Columbia;Victoria", "Manitoba;Winnipeg", "New Brunswick:Fredericton",
"Newfoundland and Labrador;St.John's", "Nova Scotia;Halifax", "Ontario;Toronto", "Prince Edward Island;Charlottetown",
"Quebec;Quebec City", "Saskatchewan;Regina", "Northwest Territories;Yellowknife", "Nunavut;Iqaluit", "Yukon;Whitehorse",
"Alabama;Montgomery", "Alaska;Juneau", "Arizona;Phoenix", "Arkansas;Little Rock", "California;Sacramento", "Colorado;Denver",
"Connecticut;Hartford"};
然后我有一个 for 循环将省份与首都分开(在“;”之前和之后)。但是由于某种原因,我得到了错误,java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
。
for(int k = 0; k < bonusArray.length; k++){
String[] split = bonusArray[k].split(";");
String prov = split[0];
String cap = split[1];
if(prov.equals(answer)){
bonusAnswer = cap;
}
}
我该如何解决这个错误?
编辑:已修复,我不小心将 :
而不是 ;
作为我的数组项之一。
您在 "New Brunswick:Fredericton" 中有错字,需要分号而不是常规冒号
String[] split = bonusArray[k].split(";");
您只是假设,您将始终获得包含 2 个元素的 split
变量。在这种情况下,您的输入有一些元素在拆分时没有 return 2 个元素,split()
不是真正的 returning 2 个元素,这就是为什么 ArrayIndexOutOfBoundsException
.
在访问指定索引处的元素之前始终检查 "array length"。
编辑:
"New Brunswick:Fredericton" 在此字符串上调用 split(";")
不会 return 2 个元素。
数组中有值没有;
(分号),如New Brunswick:Fredericton
所以这段代码
String[] split = bonusArray[k].split(";");
给出一个长度为 1
的数组
这会导致异常 String cap = split[1];
,因为您只能访问 split[0]
(记住长度 = 1)。
因此,您必须确保数组中的每个元素都具有 ;
,或者在访问它们的值之前检查 split
变量的长度。
"New Brunswick:Fredericton" 不包含“;” .
尝试将 split() 和 [0], [1] 部分嵌入 try-catch 块中,以确保不会出现 OutOfBoundsException。
我们可以通过多种方式做到这一点,但最好的方法是使用 split.length-1
而不是给出硬编码值作为索引。通过使用它,即使数组长度为 1,你也永远不会得到这个异常。
for(int k = 0; k < bonusArray.length; k++){
String[] split = bonusArray[k].split(";");
String prov = split[0];
String cap = split[split.length-1];
if(prov.equals(answer)){
bonusAnswer = cap;
}
}
我有一个格式为 province;capital
的数组。
provArray = new String[] { "Alberta;Edmonton", "British Columbia;Victoria", "Manitoba;Winnipeg", "New Brunswick:Fredericton",
"Newfoundland and Labrador;St.John's", "Nova Scotia;Halifax", "Ontario;Toronto", "Prince Edward Island;Charlottetown",
"Quebec;Quebec City", "Saskatchewan;Regina", "Northwest Territories;Yellowknife", "Nunavut;Iqaluit", "Yukon;Whitehorse",
"Alabama;Montgomery", "Alaska;Juneau", "Arizona;Phoenix", "Arkansas;Little Rock", "California;Sacramento", "Colorado;Denver",
"Connecticut;Hartford"};
然后我有一个 for 循环将省份与首都分开(在“;”之前和之后)。但是由于某种原因,我得到了错误,java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
。
for(int k = 0; k < bonusArray.length; k++){
String[] split = bonusArray[k].split(";");
String prov = split[0];
String cap = split[1];
if(prov.equals(answer)){
bonusAnswer = cap;
}
}
我该如何解决这个错误?
编辑:已修复,我不小心将 :
而不是 ;
作为我的数组项之一。
您在 "New Brunswick:Fredericton" 中有错字,需要分号而不是常规冒号
String[] split = bonusArray[k].split(";");
您只是假设,您将始终获得包含 2 个元素的 split
变量。在这种情况下,您的输入有一些元素在拆分时没有 return 2 个元素,split()
不是真正的 returning 2 个元素,这就是为什么 ArrayIndexOutOfBoundsException
.
在访问指定索引处的元素之前始终检查 "array length"。
编辑:
"New Brunswick:Fredericton" 在此字符串上调用 split(";")
不会 return 2 个元素。
数组中有值没有;
(分号),如New Brunswick:Fredericton
所以这段代码
String[] split = bonusArray[k].split(";");
给出一个长度为 1
这会导致异常 String cap = split[1];
,因为您只能访问 split[0]
(记住长度 = 1)。
因此,您必须确保数组中的每个元素都具有 ;
,或者在访问它们的值之前检查 split
变量的长度。
"New Brunswick:Fredericton" 不包含“;” . 尝试将 split() 和 [0], [1] 部分嵌入 try-catch 块中,以确保不会出现 OutOfBoundsException。
我们可以通过多种方式做到这一点,但最好的方法是使用 split.length-1
而不是给出硬编码值作为索引。通过使用它,即使数组长度为 1,你也永远不会得到这个异常。
for(int k = 0; k < bonusArray.length; k++){
String[] split = bonusArray[k].split(";");
String prov = split[0];
String cap = split[split.length-1];
if(prov.equals(answer)){
bonusAnswer = cap;
}
}