数组错误java.lang.ArrayIndexOutOfBoundsException:长度=1;索引=1
我有一个格式为数组错误java.lang.ArrayIndexOutOfBoundsException:长度=1;索引=1,java,arrays,android-studio,indexoutofboundsexception,Java,Arrays,Android Studio,Indexoutofboundsexception,我有一个格式为省的数组;大写字母 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
省的数组;大写字母
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;索引=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;
}
}
for(int k=0;k
如何修复此错误
编辑:修复了,我不小心把:
改成了我的一个数组项的代码>。您在“新不伦瑞克:弗雷德里克顿”中有一个输入错误,需要一个分号和一个常规冒号您在“新不伦瑞克:弗雷德里克顿”中有一个输入错误,需要一个分号和一个常规冒号
String[] split = bonusArray[k].split(";");
您只是简单地假设,您将始终获得包含2个元素的split
变量。在这种情况下,您的输入有一些元素在拆分时不返回2个元素,split()
实际上不返回2个元素,这就是为什么ArrayIndexOutOfBoundsException
的原因
在访问指定索引处的元素之前,请始终检查“数组长度”
编辑:
对该字符串调用split(;”
“New Brunswick:Fredericton”将不会返回2个元素
您只是简单地假设,您将始终获得包含2个元素的split
变量。在这种情况下,您的输入有一些元素在拆分时不返回2个元素,split()
实际上不返回2个元素,这就是为什么ArrayIndexOutOfBoundsException
的原因
在访问指定索引处的元素之前,请始终检查“数组长度”
编辑:
“New Brunswick:Fredericton”在此字符串上调用split(;”)
将不会返回2个元素。数组中有一些值没有代码>(分号),例如新不伦瑞克省:弗雷德里克顿
所以这个代码
String[]split=bonusArray[k].split(“;”)代码>给出一个长度为1的数组
这导致异常String cap=split[1]因为您只能访问拆分[0]
(请记住长度=1)
因此,您必须确保数组中的每个元素都有
或在访问变量值之前检查拆分变量的长度。数组中有一些值没有代码>(分号),例如新不伦瑞克省:弗雷德里克顿
所以这个代码
String[]split=bonusArray[k].split(“;”)代码>给出一个长度为1的数组
这导致异常String cap=split[1]因为您只能访问拆分[0]
(请记住长度=1)
因此,您必须确保数组中的每个元素都有
或在访问变量值之前检查拆分变量的长度。“新不伦瑞克省:弗雷德里克顿”不包含“;”。
尝试将split()和[0]、[1]部分嵌入到Try-catch块中,以确保不会发生边界外异常。“新不伦瑞克:Fredericton”不包含“;”。
尝试将split()和[0]、[1]部分嵌入到Try-catch块中,以确保不会发生边界外异常。我们可以通过多种方法实现这一点,但最好的方法是使用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;
}
}
for(int k=0;k
我们可以用多种方法来实现这一点,但最好的方法是使用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;
}
}
for(int k=0;k
例如“新不伦瑞克:弗雷德里克顿”
@AndyTurner完全正确!谢谢你!没意识到,好像已经修好了@不客气。太好了,你解决了这个问题!记住所有帮助你和未来读者发现这些帖子有用的答案<代码>“新不伦瑞克:弗雷德里克顿”
@AndyTurner完全正确!谢谢你!没意识到,好像已经修好了@不客气。太好了,你解决了这个问题!请记住所有帮助您和未来读者发现这些帖子有用的答案。谢谢!我不知道,这似乎已经解决了谢谢你!没有意识到,这似乎已经解决了考虑到这不是存储此数据的最佳方式:定义一个类省
,它将名称和大写字母存储为单独的字段,您可以像新省(“艾伯塔省”、“埃德蒙顿省”)一样初始化该类。考虑这不是最好的存储数据的方法:定义一个类<代码>省<代码>,它将名称和资本存储为单独的字段,初始化为“<代码>新的省(“阿尔伯塔”,“埃德蒙顿”)< /代码>。它不返回两个元素,例如,哪些元素不返回两个元素?