2014-10-05 86 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 
} 

这应该是优于硬编码