我有let rec sum3 a = match a with
| [] -> false
| 1::2::xs -> true
| 2::1::xs -> true
| _::xs -> sum3 xs
array
字节10
。我想创建一个具有特定大小的byte
个array
,并且它只会随机包含特定的byte
10
,但频率必须几乎相同。
我明白了:
bytes
我想使用上面的public static byte[] a = {97, 98, 99, 100, 101, 102, 103, 104, 105, 49, 45};
创建一个包含 2000 byte
s 大小的二进制数据的文件。
答案 0 :(得分:1)
最简单的方法(从代码的角度来看)是使用Collections.shuffle()
来清理列表。要使用它,您需要使用所需的分发创建List
个字节。
以下是一些代码:
byte[] a = {97, 98, 99, 100, 101, 102, 103, 104, 105, 49, 45};
int SIZE_MULTIPLIER = 20;
List<Byte> bytes = new ArrayList<>();
for (byte b : a) for (int i = 0; i < SIZE_MULTIPLIER; i++) bytes.add(b);
Collections.shuffle(bytes);
byte[] random = new byte[SIZE_MULTIPLIER * a.length];
for (int i = 0; i < bytes.size(); i++) random[i] = bytes.get(i);
注意,重要的不是初始数据的“随机”程度 - 在这种情况下,将元素0加载20次,然后元素1加载20次等等是方便的。
因为值的范围不随机(每个元素的使用次数与其他每个元素的次数相同),最终数组的分布将与初始数组的分布相同