Попытка случайным образом сгенерировать двоичное число от 000 до 110 - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть код, который случайным образом генерирует двоичное число от 000 до 111, но у меня возникают проблемы с созданием числа от 000 до всего 110 . Я знаю, что могу как-то перезапустить код, все, что у него получается, 111, но я не могу понять, как заставить его это сделать.

public String binNumber() {
        StringBuilder storage = new StringBuilder();
        int i = 0;
        while (i < 3) {
            int binny = this.giveMeBinary();
            storage.append(String.valueOf(binny));

            i++;
        }


        return storage.toString();
    }

public int giveMeBinary() {
        Random rg = new Random();
        int bin = rg.nextInt(2);
        return bin;

    }

Ответы [ 5 ]

8 голосов
/ 01 февраля 2012

Лучший способ сделать это - сгенерировать случайное число от 0 до 6 включительно, а затем преобразовать в строку

public String binNumber() {
    Random rg = new Random();
    int n = rg.nextInt(7);
    return Integer.toBinaryString(n);
}
3 голосов
/ 01 февраля 2012

«Rerolling», если вы получите 111, это определенно плохая идея; потенциально это алгоритм с бесконечным временем выполнения, хотя на практике он вполне мог бы работать.

Зачем работать в базе 2? Работа в базе 10, легко получить случайное число от 0 до 6, а затем перевести обратно в двоичную форму.

1 голос
/ 01 февраля 2012

Что-то вроде:

Random random = new Random();

int nextNumber = random.nextInt( 7 );
System.out.println( Integer.toBinaryString( nextNumber ) );

Помните, что ваши числа, которые вы создаете на компьютере, всегда в двоичном виде. Вам просто нужно распечатать его по-другому. Таким образом, даже если вы дали ему десятичное число, это число преобразуется компилятором в двоичное. 7 == 0x111 при его компиляции.

1 голос
/ 01 февраля 2012

Если вы хотите перебросить, попробуйте это:

String num = "";
while (true)
{
      num = binNumber();
      if (!num.equals("111"))
      {
          break;
      }
}
return num; 
0 голосов
/ 17 сентября 2018

Я создал метод, который может возвращать случайное двоичное число ниже 128 (значение 128 можно изменить в коде) -

    public static void RandomBinary(int len){
    if(len<128) {
        Random random = new Random();
        boolean res;
        String randomBinary = "";
        for (int i = 0; i < len - 1; i++) {
            res = random.nextBoolean();
            if (res)
                randomBinary = randomBinary.concat("1");
            else
                randomBinary = randomBinary.concat("0");
        }
        System.out.print(randomBinary);
    }else {
        System.out.print("KeyGen maximum length allowed is 128. Please enter value below 128");
    }
}
...