我在此for
循环中收到'n必须为正错误':
for(int i = 0; i < 8; i++){
array2[i] = CS2004.numbers.get(rand.nextInt(randomNumbers.size()));
}
每当我将其更改为以下内容时,它似乎运作良好。
for(int i = 0; i < 8; i++){
array2[i] = CS2004.numbers.get(rand.nextInt(1000 + randomNumbers.size()));
}
该方法的简要背景:它读入包含前1000个素数的文件,然后将它们随机添加到大小为8的数组中。
此外,如果我添加数字1代替1000,它为数组中的每个索引提供了2.0
的答案。如果我将其更改为10,则输出结果如下:[29.0, 29.0, 17.0, 11.0, 5.0, 19.0, 29.0, 2.0]
。为了完成示例,输入100
时,结果如下:[61.0, 107.0, 433.0, 193.0, 257.0, 29.0, 463.0, 127.0]
。
数字(10, 100, 1000, ..., n)
'是否告诉'结果是否可以添加长度为n的数字?还是完全是另一种解释?
有人能告诉我为什么会出现这个错误吗?
谢谢。
答案 0 :(得分:2)
第一次调用rand.nextInt()我假设randomNumbers.size()为0.你说你想要一个0的随机数,小于0(你给的数字),这是无意义的。你必须给它一个正数,这样才能给你一个明智的结果。
我的猜测是该行应该阅读
array2[i] = CS2004.numbers.get(rand.nextInt(CS2004.numbers.size()));
答案 1 :(得分:0)
以下是JavaDoc对Random#nextInt(int)
的评论请注意,伪代码有 if (n <= 0) throw new IllegalArgumentException("n must be positive");
引用这里的摘录:
统一返回伪随机数 分布式int值介于0之间 (包括)和指定的值 (独家),从这个随机抽取 数字生成器的序列。该 nextInt的一般合同就是那个 指定范围内的一个int值 是伪随机生成的 回。所有n个可能的int值 用(大约)生产 概率相等。方法 nextInt(int n)由类实现 随机似乎:
public int nextInt(int n) { if (n <= 0) throw new IllegalArgumentException("n must be
阳性“);
if ((n & -n) == n) // i.e., n is a power of 2 return (int)((n * (long)next(31)) >> 31); int bits, val; do { bits = next(31); val = bits % n; } while (bits - val + (n-1) < 0); return val; }