负数不会进入int

时间:2014-02-24 08:23:15

标签: java random arraylist

我在java中有以下代码。在这里,我试图看到数组的随机组合。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Random;

public class Dummy {
    public static void main(String args[]) throws Exception {
        Random rand = new Random();

        int[] a = { 1, 2, 3, 4, 5 };
        int[] b = { 1, 0, 1, 0, 1 };
        Arrays.sort(a);
        Arrays.sort(b);
        int x = a.length * b.length;
        System.out.println(x);

        ArrayList<Integer> list = new ArrayList<Integer>();
        for (int i = 0; i < 25; i++) {

            System.out.println("random of i is" + a[rand.nextInt(i)]
                    + "and j is " + b[rand.nextInt(i)]);

        }
        System.out.println(list);

    }
}

在这里我得到以下错误。

Exception in thread "main" java.lang.IllegalArgumentException: n must be positive
    at java.util.Random.nextInt(Unknown Source)
    at Dummy.main(Dummy.java:20)

请让我知道如何解决它。根据基于相似问题的其他一些帖子,我发现只有正数才会给出随机数,我想知道我如何给出负数。

此外,我想知道通过延续[]和b []可以得到多少组合。

由于

2 个答案:

答案 0 :(得分:7)

您的error是因为您在rand.nextInt(i)传递了0。

rand.nextInt() expects positive integer greater that 0.

答案 1 :(得分:2)

您正在循环数组,最大值为25且为0,

将最大值更改为数组大小,然后将i初始化为大于零 否则你会得到ArrayIndexOutOfBoundsException

这样做

for (int i = 1; i <= a.length; i++) {

            System.out.println("random of i is" + a[rand.nextInt(i)]
                    + "and j is " + b[rand.nextInt(i)]);
}