过去几天 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;
}
我可以知道实现目标的正确方法是什么?任何帮助将不胜感激
答案 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.length
为5
且i
值为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)