您似乎想创建一个随机的字节数组。但是您目前正在做的是生成一个 0 和 1 字节(不是位)的随机数组。您的所有字节(= 8 位)都是 00000000 或 00000001。您真正想要的是 0-255 范围内的字节。您应该使用Random.nextBytes(byte[]genes)来创建您的基因。
生成随机字节并将它们放入用户提供的字节数组中。产生的随机字节数等于字节数组的长度。)
然后你想把它转换回小数。但是,一旦您有超过 4 个字节,这些值将不再适合 32 位(=4 字节)整数。如果您有超过 8 个字节,它们将不适合 64 位整数等。
对于转换,我会使用BigInteger类。它会为您处理转换,因此您不必处理字节顺序。
所以,假设你想要一个 64位的随机基因,你可以这样做:
public static void main( String args[] ){
// create random object
Random r = new Random();
int numBits = 64;
int numBytes = numBits/8;
// create the byte array
byte[] genes = new byte[numBytes];
//fill it
r.nextBytes(genes);
//print it
System.out.println("byte array: " + genes);
//now convert it to a 64-bit long using BigInteger
long l = new BigInteger(bytes).longValue();
//print it
System.out.println("long: " + l);
}
当然,你也可以直接生成一个随机长值,使用:
Random r = new Random();
long longGenes = r.nextLong();
如果您真的需要一个字节数组,请将其转换为字节数组:
byte[] genes = new BigInteger(longGenes).toByteArray();