2017-04-20 99 views
-2

过去几天获取ArrayIndexOutOfBoundsException。我知道已在#SO上询问过这类问题。我试过了 。获取ArrayIndexOutOfBoundsException异常

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

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

+0

之前访问你可以检查使用if条件 –

+0

这是很难理解你想要达到的目的。但你可以这样检查:'while((i + 1) Marat

+0

String [] Child_DOB:不兼容的类型,它应该是String。拆分字符串并使字符串[]。 – Janak

回答

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 
} 
+0

我会试试这个。 – Kankana

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

我想这会解决你的代码。

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]

希望这将有助于〜

+0

@void你问题的现状是什么?试试我的答案来解决它.. – FAT

1

您在只有一个元素Child_DOB所以Child_DOB.length = 1,内部while循环您试图访问第二个元素Child_DOB [I + 1]在第一次迭代本身...所以你得到的例外... 你能准确地告诉你想要的输出吗?

1

使用 -

while (i < Child_DOB.length - 1) 

相反的 -

while (i < Child_DOB.length) 
相关问题