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

Java 尝试随机生成从000到110的二进制数,java,random,binary,Java,Random,Binary,我有一些代码可以随机生成一个从000到111的二进制数,但是我很难让它创建一个从000到110的数字。我知道我可以以某种方式重新运行代码,但我似乎无法找到让它这样做的方法 public String binNumber() { StringBuilder storage = new StringBuilder(); int i = 0; while (i < 3) { int binny = this.giveMeBi

我有一些代码可以随机生成一个从000到111的二进制数,但是我很难让它创建一个从000到110的数字。我知道我可以以某种方式重新运行代码,但我似乎无法找到让它这样做的方法

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;

    }
公共字符串binNumber(){
StringBuilder存储=新建StringBuilder();
int i=0;
而(i<3){
int binny=this.giveMeBinary();
storage.append(String.valueOf(binny));
i++;
}
return storage.toString();
}
公共int-giveMeBinary(){
随机rg=新随机();
int bin=rg.nextInt(2);
返回仓;
}
“重新滚动”如果你得到111肯定是个坏主意;这可能是一个运行时间无限的算法,尽管在实践中它会做得很好


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

更好的方法是生成一个包含0到6的随机数,然后转换为字符串

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

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

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

Random random = new Random();

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

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

我创建了一个方法,它可以返回128以下的随机二进制数(值128可以在代码中更改)-

publicstaticvoidrandombinary(int-len){

如果(lenYou正在生成二进制数字,这似乎是问题所在,请尝试生成一个从0到6的整数,然后将其转换为二进制。我的项目的一部分是用二进制进行。我不同意这是一个坏主意。每次迭代时重新滚动的概率为1/8,因此在概率为7/8的情况下,您将在每次迭代时终止。下面给出这是一个8/7的预期迭代次数,更多迭代的概率呈指数递减。这将是一个极其罕见的事件,需要超过十次左右的迭代,因为这有概率1/(8^10)=1/(2^30),约为十亿分之一。在整个宇宙历史中,这需要一百多次迭代的可能性非常低,不太可能发生。正如我所说,“在实践中,它会做得很好。”你肯定会同意,我们应该尽量远离O(无穷大)当有合理的替代方案时的算法。我想你的意思是第二行应该以
7
作为参数。
    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");
    }
}