2017-02-11 3 views
0

FIXES:Comment réparer une erreur d'index hors limites?

J'ai enlevé ma boucle while et ajouté

if (num.contains(count) == true) { 
       freq = Collections.frequency(num, count); 

       for (int k = 0; k < freq; k++) { 
        sb.append(temp); 
       } 
      } 

J'essaie d'ajouter un des exemplaires supplémentaires de lettres au hasard (bien entre 0-8) à un mot. Exemple ... peut se transformer en dddooees ou en doeess.

Ma fonction fonctionne parfois, mais se bloque toujours avec une erreur d'index Out of Bounds.

Je suppose que j'ai besoin de vérifier une valeur NULL ma ArrayList à un moment donné. J'ai essayé d'emballer ma déclaration while avec et si vérifier, mais aucune amélioration n'a été faite. Aucune suggestion?

private static String addLetters(String word) { 
     StringBuilder sb = new StringBuilder(word.length()); 
     String[] apart = word.split(""); 
     int rand = (int)(Math.random() * 8); 
     int ran, goUp; 
     int count = 0; 

     List<Integer> num = new ArrayList<>(); 

     for (int i = 0; i < rand; i++) { 
      ran = (int)(Math.random() * word.length()); 
      num.add(ran); 
     } 

     Collections.sort(num); 

     for (int temp : num) { 
      System.out.println(temp); 
     } 

     for (String temp: apart) { 
      goUp = count; 

      sb.append(temp); 
      System.out.printf("String so far: %s\n", sb.toString()); 
      System.out.printf("OUTSIDE: count: %d, goUp: %d\n", count, goUp); 

     /* 
     Removed the while loop and added in the above code using collections, works as intended now. 
     */ 
      while (count == num.get(goUp)) { 
       System.out.printf("INSIDE: count: %d, goUp: %d\n", count, num.get(goUp)); 
       sb.append(temp); 
       System.out.printf("String ADD extra: %s\n", sb.toString()); 
       goUp++; 
      } 
      count++; 
     } 
     return sb.toString(); 
    } 

Répondre

1

Votre boucle est sur l'entrée de texte (taille) et vous faire un num.get(goUp) NOMB (partie rand) si la taille d'entrée de mot est plus grand que la taille de rand vous avez cette erreur (ligne 41):

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2 
    at java.util.ArrayList.rangeCheck(ArrayList.java:638) 
    at java.util.ArrayList.get(ArrayList.java:414) 
    at com.sgr.games.Stack.addLetters(Stack.java:41) 
    at com.sgr.games.Stack.main(Stack.java:10) 

L39 System.out.printf("OUTSIDE: count: %d, goUp: %d\n", count, goUp); 
L40 
L41 while (count == num.get(goUp)) { 
L42  System.out.printf("INSIDE: count: %d, goUp: %d\n", count, num.get(goUp)); 
+0

Oui je vois, l'a réparé. – Yawn

0

Les erreurs hors-limite d'index de tableau devraient normalement être traitées en corrigeant le bogue. Votre logique est assez confuse que je ne sais pas exactement comment votre code est censé fonctionner. Cependant, je vois votre crash:

Comparez le but du tableau num comme indiqué par la manière dont vous le remplissez dans le but pour lequel il est utilisé dans le conditionnel de l'instruction while. Vous l'utilisez évidemment de deux façons différentes.