2013-10-10 3 views
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?

+0

Прочитайте документацию. –

+4

@SotiriosDelimanolis Ошибка 'size = 0'. –

+0

@Rohit Ah 'n <= 0' –

ответ

6

В этой строке

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

вы пытаетесь генерировать случайные числа.

Однако у вас есть пустой usedArray, поэтому он возвращает 0. Вы не можете генерировать случайное число в диапазоне от 0 до 0, исключая. Значение должно быть 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_, однако в списке должны быть элементы. –

Смежные вопросы