2017-04-20 3 views
-2

Letzte Tage Getting ArrayIndexOutOfBoundsException .Ich kenne diese Art von Fragen bereits auf #SO. Ich habe es versucht .Getting ArrayIndexOutOfBoundsException Ausnahmen

java.lang.ArrayIndexOutOfBoundsException: Länge = 1; index = 1

-Code

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

Darf ich wissen, was ist der richtige Weg, um mein Ziel zu erreichen? Jede Hilfe wäre sehr sein geschätzt

+0

vor dem Zugriff auf Sie überprüfen können, zu verwenden, wenn Bedingung –

+0

Es ist schwer zu verstehen, was Sie zu erreichen versuchen. Aber Sie können wie folgt überprüfen: 'while ((i + 1) Marat

+0

String [] Child_DOB: inkompatibler Typ, sollte String sein. Teilen Sie String und machen Sie String []. – Janak

Antwort

2

Dies ist wegen der Linie, wie Sie wies darauf hin:

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

Sagen Sie nur ein Element in Ihrem Child_DOB Array, würden Sie Ihre while-Schleife eingeben, und i = 0 versuchen zu Zugang i+1 dh 1. Element. Das Array beginnt mit dem 0. Index und daher würde das Zugreifen auf das Element bei Index 1 ArrayIndexOutOfBoundsException auslösen. Um dies zu vermeiden, wäre eine Option:

Dies würde funktionieren, wenn Ihr Array eine gerade Anzahl von Elementen hat. Wenn Sie ungerade Anzahl von Elementen haben, dann würden Sie den Nachnamen verpassen

wenn Sie wirklich möchten nicht das letzte Element verpassen, könnten Sie etwas tun, wie (die als pro Ihre Logik sollte in Ordnung sein.):

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

Ich werde das versuchen. – Kankana

1

Es gibt nur einen String in CHILD_DOB. In Ihrer while-Anweisung haben Sie Child_DOB[i + 1] eingegeben; die CHILD_DOB[1] greift aber es ist nur ein Element in CHILD_DOB die CHILD_DOB[0] dieses

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

Versuchen, die ich denke, Ihr Code beheben würde.

2

Ihre while Schleife ändern condition wie:

while (i < Child_DOB.length - 1) 

Erläuterung:

Zum Beispiel Child_DOB.length ist 5 und i Wert ist 4, in Ihrem Code:

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

Hier Child_DOB[5] verursacht ArrayIndexOutOfBoundsException, weil Array index von 0 beginnend und Child_DOB Index [0 1 2 3 4] sind.

Hope this helfen ~

+0

@wie ist der aktuelle Status Ihres Problems? Versuchen Sie meine Antwort, um es zu lösen. – FAT

1

Sie haben nur ein Element in Child_DOB so Child_DOB.length = 1, und innerhalb while-Schleife Sie versuchen, 2. Element zugreifen Child_DOB [i + 1] in der ersten Iteration selbst ...Sie erhalten also eine Ausnahme ... Können Sie genau sagen, welche Ausgabe Sie wollen?

1

Einsatz-

while (i < Child_DOB.length - 1) 

statt -

while (i < Child_DOB.length) 
Verwandte Themen