Java:生成唯一的随机字符

时间:2019-02-23 05:40:40

标签: java random character

我有一串“随机”字符。我根据每个字符在字符串中的位置为每个字符分配了一个数值,然后设置一个循环以在任意选择的随机位置输出字符。到目前为止,这是我的代码:

public class Random9_4 {

  public static void main(String[] args) {

    final String chords = "ADE";
    final int N = chords.length();
    java.util.Random rand = new java.util.Random();
    for(int i = 0; i < 50; i++)
    {
        //char s = chords.charAt(rand.nextInt(N));
        //char t = chords.charAt(rand.nextInt(N));

        System.out.println(chords.charAt(rand.nextInt(N)));
        //temp variable
        //while(s == t)
        //{
        //  
        //}System.out.println(chords.charAt(rand.nextInt(N)));
    }
  }
}

到目前为止,它可以正常工作,但字符有时会重复。我希望它是字符的“唯一”输出(意味着后续字符不会重复)。我知道执行此操作的一种方法是使用一个临时变量来检查当前字符与前一个字符以及下一个将显示的字符,但是我不确定如何开始。

2 个答案:

答案 0 :(得分:1)

如果与上次迭代中生成的字符匹配,则需要使用内部循环来生成新字符。

temp是一个临时字符变量,它会记住生成的最后一个字符。因此,在while循环中,我们将迭代直到生成一个新字符,该新字符与temp变量中的字符不同。

如果生成了一个新字符,它将被分配给temp变量,因此在下一次迭代中,可以应用相同的逻辑。

public static void main(String[] args) {
        final String chords = "ADE";
        final int N = chords.length();
        Random rand = new Random();
        char temp = 0;
        for (int i = 0; i < 50; i++) {
           char s = chords.charAt(rand.nextInt(N));
           while(s == temp){ //loop until a new character is generated, this loop will stop when s != temp
               s = chords.charAt(rand.nextInt(N));
           }
           temp = s; //assign current character to the temp variable, so on next iteration this can be compared with the new character generated.
           System.out.println(s);
        }
}

答案 1 :(得分:0)

我不确定我是否正确理解了你的问题。

是否只是创建一个变量来存储先前的输出?就像问题代码一样。

    final String chords = "ADE";
    final int N = chords.length();
    Random rand = new Random();
    Character curr = null;
    Character prev = null;
    for (int i = 0; i < 50; i++) {
        curr = chords.charAt(rand.nextInt(N));
        while (curr == prev)
            curr = chords.charAt(rand.nextInt(N));

        prev = curr;
        System.out.println(curr);
    }