Java: генерировать уникальный случайный символ - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть строка "случайных" символов.Я назначил числовое значение каждому символу в зависимости от его положения в строке, а затем установил цикл для вывода символа в любой выбранной случайной позиции.Вот мой код:

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 голосов
/ 23 февраля 2019

Вам необходимо использовать внутренний цикл для генерации нового символа, если он совпадает с символом, сгенерированным в последней итерации.

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);
        }
}
0 голосов
/ 23 февраля 2019

Я не уверен, что правильно понял ваш вопрос.

Создает ли он просто переменную для хранения предыдущего вывода?Как блеф-код.

    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);
    }
...