2017-10-06 98 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));