2

主类:

public class ECONAPP2 {
static Scanner input= new Scanner(System.in);
static int score = 0;
static ArrayList<Integer> usedArray = new ArrayList<Integer>();

public static void main(String[] args){
    app();
    arrayContents();
}

public static void arrayContents() { 
    usedArray.add(2);
    usedArray.add(1);
}

应用程序()方法:

public static void app() {
    Random generator = new Random ();
    int randomNumber = generator.nextInt(usedArray.size());
    System.out.println(randomNumber);
    if (randomNumber == 2) {
        score();
        question2();
        usedArray.remove(2);
        app();
    }
    if (randomNumber == 1) {
        score();
        question1();                
        usedArray.remove(1);
        app();
    }

收到此错误:

Exception in thread "main" java.lang.IllegalArgumentException: n must be positive
at java.util.Random.nextInt(Random.java:250)
at ECONAPP2.app(ECONAPP2.java:65)
at ECONAPP2.main(ECONAPP2.java:10)

无法弄清楚这意味着什么以及 n 代表什么?

4

3 回答 3

8

在这一行

int randomNumber = generator.nextInt(usedArray.size());

您正在尝试生成随机数。

但是你有空的usedArray,所以它返回0。你不能在0到0范围内生成随机数,所以它会抛出异常。该值必须为 1 或更高。

注意文档:“介于 0(包括)和指定值(不包括)之间的值”,例如generator.nextInt(1)在所有调用中返回 0,generator.nextInt(2)返回 0 或 1...

于 2013-10-10T19:32:46.650 回答
1

n表示Random#nextInt(int n)方法的参数。参数必须是正整数。在您的示例中,数组的大小可能是0,从而导致异常。

于 2013-10-10T19:31:01.817 回答
0

您想更改在 main 方法中调用方法的顺序。尝试这个:

public static void main(String[] args){
    arrayContents();
    app();
}

这样,当您调用ArrayList 时app(),您的 ArrayList 中有项目。

于 2013-10-10T19:35:20.433 回答