试图随机生成从000到110的二进制数

问题描述 投票:0回答:5

我有代码随机生成一个从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;

    }
java random binary
5个回答
8
投票

更好的方法是生成0到6(包括0和6)的随机数,然后转换为字符串

public String binNumber() {
    Random rg = new Random();
    int n = rg.nextInt(7);
    return Integer.toBinaryString(n);
}

3
投票

如果你得到111,“Rerolling”肯定是一个坏主意;这可能是一个具有无限运行时间的算法,尽管在实践中它会做得很好。

为什么在基地2工作?在基数10中工作,可以轻松获得0到6之间的随机数,然后转换回二进制数。


1
投票

就像是:

Random random = new Random();

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

请记住,您在计算机中创建的数字始终为二进制。你只需要以不同的方式打印出来。所以即使你给它一个十进制数,这个数字也会被编译器转换成二进制数。当编译时7 == 0x111。


1
投票

如果要重新滚动,请尝试以下操作:

String num = "";
while (true)
{
      num = binNumber();
      if (!num.equals("111"))
      {
          break;
      }
}
return num; 

0
投票

我创建了一个方法,可以返回一个低于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");
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.