我有代码随机生成一个从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;
}
更好的方法是生成0到6(包括0和6)的随机数,然后转换为字符串
public String binNumber() {
Random rg = new Random();
int n = rg.nextInt(7);
return Integer.toBinaryString(n);
}
如果你得到111,“Rerolling”肯定是一个坏主意;这可能是一个具有无限运行时间的算法,尽管在实践中它会做得很好。
为什么在基地2工作?在基数10中工作,可以轻松获得0到6之间的随机数,然后转换回二进制数。
就像是:
Random random = new Random();
int nextNumber = random.nextInt( 7 );
System.out.println( Integer.toBinaryString( nextNumber ) );
请记住,您在计算机中创建的数字始终为二进制。你只需要以不同的方式打印出来。所以即使你给它一个十进制数,这个数字也会被编译器转换成二进制数。当编译时7 == 0x111。
如果要重新滚动,请尝试以下操作:
String num = "";
while (true)
{
num = binNumber();
if (!num.equals("111"))
{
break;
}
}
return num;
我创建了一个方法,可以返回一个低于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");
}
}