0

在我的 ArrayList 中,我从 ArrayList 中获得了一个随机项目,用于装备方法。

每当我使用我的测试仪时,java.lang.IllegalArgumentException: n must be positive当我尝试调用随机尺寸时,终端窗口就会打印出来。

我试图将 totalElements 的值更改为元素的整数大小,然后错误将是OutOfBoundsExeption

import java.util.*;
import java.util.Scanner;
import java.util.Random;
public class GameMaster {



    private int turn, totalElements;
    private boolean winner;
    private Avatar x1;
    private Avatar x2;
    private ArrayList<Item> inventory;

    public GameMaster(Avatar a1, Avatar a2)
    {

    x2 = a1;
    x1 = a2;
    turn = 1;
    winner = false;
    inventory = new ArrayList<Item>();
    totalElements = 0;

    }

    private void fillInventory()
    {

    inventory.add( new Item( "Zealot Blades", true, 8 ) );
    inventory.add( new Item( "BFG", true, 13 ) );
    inventory.add( new Item( "Synthetic Cloth", false, 7 ) );
    // more items 


    inventory.add( new Item( "Gauss Rifle", true, 9 ) );
    inventory.add( new Item( "Flight Unit", false, 6 ) );

    totalElements = inventory.size();


    }

    public String equip()
    {
    Avatar w;
    String a;
    if (turn%2==1)
            w=x2;
    else 
            w=x1;

    if (w.beltIsFull())
    {

            a = w.getName() + "'s belt is full. \n";
    }

    else
    {
            turn++;
            Random generator = new Random();  
            Item rand = inventory.get(generator.nextInt(totalElements));
            //terminal window in blueJ: java.lang.IllegalArgumentException: n must be positive              

            a = w.getName()+" is equiped with "+rand.getName()+".";



    }
    return a;

}
4

1 回答 1

1

例外是告诉您totalElements小于或等于零。我认为那是因为你还没有初始化它。(我可以看到该fillInventory方法,但我看不到您的代码在哪里调用它......)

于 2012-09-29T14:19:59.267 回答