我有一种情况,我需要生成16位50位二进制数的唯一随机序列。然后将它以4x4矩阵存储到文件中。
我是以这种方式完成的
import java.util.Random;
public class BitGenerator{
public static void main(String[] args) {
String bits = "";
Random r = new Random();
for(int j=0; j<15; j++){
for(int i=0; i<50; i++){
int x = 0;
if(r.nextBoolean()) x=1;
bits += x;
}
}
System.out.println(bits);
}
}
但是当我运行这个程序时,&#34; java BitGenerator&gt; Random.doc&#34;,它一次显示所有字符。请帮忙。
答案 0 :(得分:1)
你不能只生成一个64位的随机数,然后将其屏蔽以获得最不重要的50位吗? Something like:
final Random r = new Random();
for (int i = 0; i < 16; ++i)
{
long value = r.nextLong() & 0x3FFFFFFFFFFFFL;
String stringValue = Long.toBinaryString(value);
// pad stringValues with 0s if length < 50
// or set to 1 the 51th bit and then trim first character
// output number on file
}
要强制字符串为50个字符,您可以使用某种黑客,设置第51位然后丢弃第一个字符,如:
value |= 1L << 50;
String stringValue = Long.toBinaryString(value).substring(1);
答案 1 :(得分:0)
您可以使用按位运算(请参阅Jack的答案)来提取随机二进制值并将其插入字符串矩阵,而不是使用布尔值。这是一个live示例。
final Random r = new Random();
String matrix[][] = new String[4][4];
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
long value = r.nextLong() >>> -50;
value |= 1L << 50;
matrix[i][j] = Long.toBinaryString(value).substring(1);
}
}