2014-10-05 40 views
1

由於某些原因,此代碼不起作用。字符串替換不適用於for循環 - Java

public void actionPerformed(ActionEvent e) { 

      Random random = new Random(); 
      int randomChar = random.nextInt((23 - 0) + 1); 
      for(int x = 23;x > 0;x--) { 

       String text; 
       text = original.getText(); 
       text = text.toLowerCase(); 
       text = text.replace(alphabet[x], alphabet[randomChar]); 

       newText.setText(text); 

      } 

只是爲了清除一些東西原來和newText是JTextField和字母表是一個字符數組與a-z。

現在當我運行它時,它應該經過並用隨機的字符替換每個字符,從Z開始到A結束,但它只是給我輸入完全相同的字符串,只是轉換爲小寫。

值得一提的是,如果我取代

text = text.replace(alphabet[x], alphabet[randomChar]); 

隨着

text = text.replace(alphabet[0], alphabet[randomChar]); 

而且放了一堆A的進入輸入框中它不改變它們爲一個隨機的信。 EG:

aaaa input 
llll output 
or gggg output 

它只是不工作,如果我有一個變量在那裏。

其餘代碼並不重要,它都是聲明變量並設置GUI。

任何幫助非常感謝!

+0

嘗試打印隨機字符並在循環中輸入字符串,以便您可以調試正在進行的操作並確保字符串實際上包含字符。 – SamTebbs33 2014-10-05 17:44:24

+0

這兩個工作正常,X遞減和隨機選擇隨機數(一旦我把它移到for循環內,這並沒有解決問題btw) – Unknown 2014-10-05 17:51:43

回答

2

除了移動內部的隨機字符生成環路(由@CIsForCoocckies建議),您還需要移動getText()setText()電話外循環(因爲每個循環運行時,你與文本重新來過所以最多一個種無論循環迭代多少次,字符都會被替換。

+0

謝謝謝謝謝謝你。我不敢相信我忽略了這一點。 – Unknown 2014-10-05 18:12:00

+0

:)不客氣! – 2014-10-05 18:28:03

1

您randomchar與一些字符在循環之前設置,然後將所有字符替換到所述焦炭所以 - 「yourstring」變成「XXXXXXXXXX」,其中x = randomchar

0

除了其他兩個答案,我想評論添加到for循環:

for(int x = 23;x > 0;x--) 

您不會進入循環當x == 0可言,這意味着第一個字符在你的字母數組中不會被考慮替換。

如果你有字母排列已經和想更換一個隨機的每一個字符,爲什麼不考慮使用:

for (int x = 0; x < alphabet.length; x++){ 
    //your code here 
} 

這應該是優於硬編碼