获取ArrayIndexOutOfBoundsException异常

时间:2017-04-20 06:32:35

标签: android indexoutofboundsexception

过去几天 ArrayIndexOutOfBoundsException 。我知道已经在#SO上提出这类问题。我试过了。

  

java.lang.ArrayIndexOutOfBoundsException:length = 1;索引= 1

代码

String[] Child_DOB = "KUSHAGRA (SON)-07/05/94AANVI (DAUGHTER)-12/06/00 VARENYA (SON) - 26/12/05";
        ArrayList<String> children_List = new ArrayList<String>();
        ArrayList<Integer> Length_List = new ArrayList<Integer>();
        String Children_Details_str = "";

        int i = 0;
        while (i < Child_DOB.length) {
            String name_dob = Child_DOB[i] + "  " + Child_DOB[i + 1];//this line
            if (i > 3)
                Children_Details_str = Children_Details_str + "\n" + name_dob;
            else
                Children_Details_str = Children_Details_str + name_dob + "  ";
            children_List.add(name_dob);
            Length_List.add(Child_DOB[i].length());
            Length_List.add(Child_DOB[i + 1].length());
            i = i + 2;
        }

我可以知道实现目标的正确方法是什么?任何帮助将不胜感激

5 个答案:

答案 0 :(得分:2)

这是因为您指出的行:

String name_dob = Child_DOB[i] + "  " + Child_DOB[i + 1];//this line

假设您的Child_DOB数组中只有一个元素,则输入while循环,然后i = 0尝试访问i+1,即第一个元素。数组从第0个索引开始,因此访问索引1处的元素将抛出ArrayIndexOutOfBoundsException。为了避免这一点,可以选择:

while (i < Child_DOB.length - 1) {//go until second last element

如果您的数组具有偶数个元素,这将有效。如果您有奇数个元素,那么您将错过姓氏(按照您的逻辑应该没问题。)

如果你真的不想错过最后一个元素,你可以这样做:

if ((Child_DOB.length & 0X1) == 1) {
    Length_List.add(Child_DOB[Child_DOB.length - 1].length());
    //append to Children_Details_str.. better use StringBuilder here
}

答案 1 :(得分:2)

将您的while循环condition更改为:

 while (i < Child_DOB.length - 1)

<强>解释

例如,Child_DOB.length5i值为4,在您的代码中:

    int i = 4;
    while (i < 5) {
        String name_dob = Child_DOB[4] + "  " + Child_DOB[4 + 1]; 

此处Child_DOB[5]会导致ArrayIndexOutOfBoundsException,因为数组index从0开始,而Child_DOB索引是[0 1 2 3 4]

希望这会有所帮助〜

答案 2 :(得分:1)

CHILD_DOB中只有一个字符串。 在您的while语句中键入Child_DOB[i + 1]; 访问CHILD_DOB[1],但CHILD_DOB中只有一个项CHILD_DOB[0] 试试这个

String[] Child_DOB = new String[] {"KUSHAGRA",
 "(SON)-07/05/94AANVI", "(DAUGHTER)-12/06/00", "VARENYA", "(SON)", "-", "26/12/05"};

我认为这会修复你的代码。

答案 3 :(得分:1)

Child_DOB 中只有一个元素,因此 Child_DOB.length = 1,并且在while循环中尝试访问第二个元素 Child_DOB [i + 1 ] 在第一次迭代中......所以你得到例外...... 你能准确说出你想要的输出吗?

答案 4 :(得分:1)

使用 -

while (i < Child_DOB.length - 1) 

而不是 -

while (i < Child_DOB.length)