2013-10-10 23 views
2

主类:非法参数异常:n必须是正

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) 

CA不知道这意味着什么,代表什么?

+0

阅读文档。 –

+4

@SotiriosDelimanolis它的'size = 0'失败。 –

+0

@Rohit啊'n <= 0' –

回答

6

在这一行

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

你想生成随机数。

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

注文档:“在0(含)值和指定值(不)”,因此,例如generator.nextInt(1)上的所有调用返回0,generator.nextInt(2)返回0或1 ...

1

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

0

你想改变为了您在主要方法中调用方法。试试这个:

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

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

+0

这并不能解释_why_列表中需要包含元素。 –