2017-10-06 97 views
-2

所以我想改变一个字符串(有罪)变成一个相同的字符串的混乱版本。唯一不随意的是任何双字母必须放在一起。所以如果我有字符串“药房”,它将不得不像“mraacpyh”。我想我知道了,但现在我得到一个StringIndexOutOfBoundsException。任何人都可以照亮我在做什么错了吗?Java的for循环获取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

你应该改变你while循环的if语句。 'if(!guilty.equals(“”)){' –

+2

你的代码很不完整。我们不知道一开始杀手是怎么做的。粘贴你的完整代码。 – progyammer

+1

@progyammer可能会杀人,因为这部分代码正在试图找到罪恶派对。 – Kayaman

回答

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

如果有罪是“苹果”我是5的最后一个字符“E”的指数是4! (第1字符的指数为0) 问题就在这里:

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

如果增加变量i,这将是高于你的字符串的最大指数。我是你的字符串的最大索引。

否则,洗牌的字符串:

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