【问题标题】:Getting ArrayIndexOutOfBoundsException Exceptions [duplicate]获取 ArrayIndexOutOfBoundsException 异常 [重复]
【发布时间】:2017-04-20 06:32:34
【问题描述】:

过去几天收到 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;
        }

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

【问题讨论】:

  • 在访问之前您可以使用 if 条件检查
  • 很难理解您要达到的目标。但你可以这样检查:while ( (i + 1) &lt; Child_DOB.length) { .. }
  • String[ ] Child_DOB : 不兼容的类型,应该是String。拆分字符串并生成 String[ ].
  • 你在 "String[] Child_DOB" 中只有一个字符串元素,所以它只有 Child_DOB[0] 但没有元素 Child_DOB[i+1] 所以它抛出异常的索引
  • @Janak Child_DOB 的值是硬编码的

标签: android indexoutofboundsexception


【解决方案1】:

这是因为你指出的行:

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
}

【讨论】:

  • 我会试试这个。
【解决方案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]

希望对你有帮助~

【讨论】:

  • @void 您的问题目前处于什么状态?试试我的答案来解决它..
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    使用-

    while (i < Child_DOB.length - 1) 
    

    而不是 -

    while (i < Child_DOB.length)
    

    【讨论】:

      【解决方案5】:

      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"};
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-15
        • 2012-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        相关资源
        最近更新 更多