Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数组错误java.lang.ArrayIndexOutOfBoundsException:长度=1;索引=1_Java_Arrays_Android Studio_Indexoutofboundsexception - Fatal编程技术网

数组错误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]
(请记住长度=1)


因此,您必须确保数组中的每个元素都有
或在访问变量值之前检查
拆分变量的长度。

数组中有一些值没有
(分号),例如
新不伦瑞克省:弗雷德里克顿

所以这个代码

String[]split=bonusArray[k].split(“;”)给出一个长度为1的数组

这导致异常
String cap=split[1]
(请记住长度=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完全正确!谢谢你!没意识到,好像已经修好了@不客气。太好了,你解决了这个问题!请记住所有帮助您和未来读者发现这些帖子有用的答案。谢谢!我不知道,这似乎已经解决了谢谢你!没有意识到,这似乎已经解决了考虑到这不是存储此数据的最佳方式:定义一个类
,它将名称和大写字母存储为单独的字段,您可以像
新省(“艾伯塔省”、“埃德蒙顿省”)一样初始化该类。考虑这不是最好的存储数据的方法:定义一个类<代码>省<代码>,它将名称和资本存储为单独的字段,初始化为“<代码>新的省(“阿尔伯塔”,“埃德蒙顿”)< /代码>。它不返回两个元素,例如,哪些元素不返回两个元素?