2016-11-21 32 views
0

我試圖用範圍內生成的隨機字符替換具有最小分配ASCII碼的字符。用隨機字符替換具有最小分配的ASCII碼的字符java

下面的代碼:

import java.util.*; 

public class TestMethod { 

Random rn = new Random(); 
public synchronized void test(String st){ 
    while(true){ 
     char c = (char)rn.nextInt(((126-33)+1)+33); 
     int min = (int)st.charAt(0); 
     int index = 0; 

     for(int i=0; i<st.length(); i++){ 
      if((int)st.charAt(i) < min){ 
       min = (int)st.charAt(i); 
       index = st.indexOf(i); 
      } 
     } 
     String newst = st.substring(0, index) + c + st.substring(index+1, st.length()); 

     try{ 
      Thread.sleep(2000); 
      System.out.println(newst); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 

     //checks if all characters equal to '~' 
     ArrayList<String> stArr = new ArrayList<String>(); 
     stArr.add(newst); 
     for(String i : stArr){ 
      if(i.length()-i.replace("~", "").length() == 0){ 
       break; 
      } 
     } 
    } 
} 

}

我得到一個運行時錯誤:

java.lang.StringIndexOutOfBoundsException: String index out of range: -1 
at java.lang.String.substring(Unknown Source) 
at TestMethod.test(TestMethod.java:18) 
at classA.run(classA.java:16) 
at java.lang.Thread.run(Unknown Source)  

在這一行:

String newst = st.substring(0, index) + c + st.substring(index+1, st.length()); 

它是什麼,我」米做錯了嗎?我剛開始嘗試同步。

+0

你在尋找最小的指數錯誤。替換index = st.indexOf(i); - > index = i; – Nosyara

回答

1

index = st.indexOf(i); 

應該

index = i; 
相關問題