二进制随机数

时间:2015-10-31 18:48:53

标签: java

我有一种情况,我需要生成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;,它一次显示所有字符。请帮忙。

2 个答案:

答案 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);
    }
}