Java n必须是正面的

时间:2011-03-18 12:17:28

标签: java arrays

我在此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的数字?还是完全是另一种解释?

有人能告诉我为什么会出现这个错误吗?

谢谢。

2 个答案:

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