2017-10-06 5 views
-2

alors j'essaie de changer une chaîne (coupable) en une version brouillée de la même chaîne. La seule chose qui ne soit pas aléatoire est que toutes les lettres doubles doivent être assemblées. Donc si j'avais la chaîne "pharmacie" ça devrait être quelque chose comme "mraacpyh". Je pensais que je l'ai compris, mais maintenant je reçois une exception StringIndexOutOfBoundsException. Quelqu'un peut-il faire la lumière sur ce que je fais mal?Java pour la boucle obtenant StringIndexOutOfBoundsException

String guilty = ""; 
    String scramble = ""; 
    if (killer == 0) 
    guilty = "pharmacy"; 
    if (killer == 1) 
    guilty = "closet"; 
    if (killer == 2) 
    guilty = "newspaper"; 
    if (killer == 3) 
    guilty = "dollar"; 
    if (killer == 4) 
    guilty = "college"; 

    while (!guilty.equals("")){ 
     int i = r.nextInt(guilty.length()); 
     for (int j = 0; j < guilty.length()-guilty.replace(guilty.substring(i, i+1), "").length(); i++){ 
     scramble = scramble + guilty.substring(i, i+1); 
     } 
     guilty = guilty.replace(guilty.substring(i, i+1), ""); 
     System.out.println(scramble); 
     System.out.println(guilty); 
    } 
+1

Vous devriez vous changer en boucle à une instruction if. 'if (! guilty.equals (" ")) {' –

+2

Votre code est assez incomplet. Nous ne savons pas ce que fait le tueur dès le début. Collez votre code complet. – progyammer

+1

@progyammer Probablement en train de tuer, puisque cette partie du code essaie de trouver le coupable. – Kayaman

Répondre

0
int i = r.nextInt(guilty.length()); 

Si coupable est i 'APPLE' est 5. index du dernier caractère 'E' est 4! (Indice de 1er caractère est 0) Le problème est ici:

guilty.replace(guilty.substring(i, i+1), "") 

si vous augmentez la variable i, il sera alors plus l'indice maximum de votre chaîne. i est l'indice maximum de votre chaîne.

Sinon, Traînant une chaîne:

import org.apache.commons.lang3.ArrayUtils; //ver.3.6 
... 
String s = "apple"; 
char[] chars = s.toCharArray(); 
ArrayUtils.shuffle(chars); 
System.out.print(String.valueOf(chars));