我有一个真正的随机字节文件。我想要一个函数,通过从文件中取一个字节并对其进行缩放,从而返回给定范围中的一个随机整数。 (这是正确的词?)将随机字节缩放到选定的整数范围
public int getInt(int l, int h) throws IOException {
int m = (h - l) + 1; // number of ranges needed
int r = 256/m; // size of byte range
int x = (r * m) - 1; // maximum allowable byte value
int b;
do {
try { // get random byte from file
b = ram.readUnsignedByte();
} catch (EOFException e) { // catch EOF, reset pointer
b = 255; ram.seek(0); // and set b to maximum value
} // so test will fail.
} while(b > x); // if byte is greater than
// allowable value, loop.
return (b/r) + l; // return random integer
} // within requested range
所以这里是我的功能。我担心通过缩放来摧毁文件中字节的真实随机性。我知道我需要抛出任何数值超过允许的最大值(因此对于数字0-9,最大值为249,因为我只剩下7个值分配给10个不同的组)。我的实现看起来是否正确?
此外,我想知道,只是通过无效某些字节太大,我是否以任何方式倾斜分布?
对不起,错过了你提供的范围。必须消失,所以我删除了我的答案,因为它没有处理范围。 –
没关系,我喜欢你的阅读更多字节的想法,并将它们转换为更大的值。我可能会稍后使用它,但只是想确保这个基本实现不会破坏文件的任何随机性。 – chrissphinx
32位整数由四个字节组成。因此,您可以安全地读取4个字节并将它们视为一个带符号的int。 –