Java 尝试随机生成从000到110的二进制数
我有一些代码可以随机生成一个从000到111的二进制数,但是我很难让它创建一个从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
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");
}
}