2017-04-20 3 views
-2

Ces derniers jours Obtention ArrayIndexOutOfBoundsException .Je connais ce type de questions déjà posées sur #SO. J'ai essayé .Obtention ArrayIndexOutOfBoundsException Exceptions

java.lang.ArrayIndexOutOfBoundsException: longueur = 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; 
     } 

Puis-je savoir quelle est la bonne façon d'atteindre mon objectif? Toute aide serait grandement appréciée

+0

avant d'accéder, vous pouvez vérifier si la condition utilise –

+0

Il est difficile de comprendre ce que vous essayez d'atteindre. Mais vous pouvez vérifier comme ceci: 'while ((i + 1) Marat

+0

String [] Child_DOB: type incompatible, il doit être String. Séparer String et créer String []. – Janak

Répondre

2

Ceci est dû à la ligne comme vous l'avez dit:

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

Supposons que vous avez un seul élément dans votre tableau Child_DOB, entrez votre boucle while, et i = 0 essayer de accès i+1 ie 1er élément. Array commence par 0th index et donc accéder à l'élément à l'index 1 lancerait ArrayIndexOutOfBoundsException. Pour éviter cela, une option serait:

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

Cela fonctionnerait si votre tableau a un nombre pair d'éléments. Si vous avez un nombre impair d'éléments alors vous manquez le nom

si vous ne voulez vraiment pas manquer le dernier élément, vous pouvez faire quelque chose comme (qui devrait être bien selon votre logique.):

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

Je vais essayer ça. – Kankana

1

Il n'y a qu'une seule chaîne dans CHILD_DOB. Dans votre instruction while, vous avez tapé Child_DOB[i + 1]; qui accède CHILD_DOB[1] mais il n'y a qu'un seul élément CHILD_DOB qui est CHILD_DOB[0] Essayez cette

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

Ce que je pense fixerait votre code.

2

Changer votre boucle whilecondition comme:

while (i < Child_DOB.length - 1) 

Explication:

Par exemple, Child_DOB.length est 5 et i valeur est 4, Dans votre code:

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

ici Child_DOB[5] provoque ArrayIndexOutOfBoundsException car le tableau index commence à 0 et vos index Child_DOB sont [0 1 2 3 4].

Espérons que cela aidera ~

+0

@void Quel est le statut actuel de votre problème? Essayez ma réponse pour le résoudre .. – FAT

1

Vous avez un seul élément Child_DOB si Child_DOB.length = 1, et à l'intérieur en boucle que vous essayez d'accéder à 2 élément Child_DOB [i + 1] dans la première itération elle-même ...Donc, vous obtenez l'exception ... Pouvez-vous dire exactement quelle sortie vous voulez ??

1

utilisation-

while (i < Child_DOB.length - 1) 

au lieu de -

while (i < Child_DOB.length)