ArrayList中的get Random有java.lang.IllegalArgumentException错误:n必须为正
在我的ArrayList中,我从ArrayList中获得了一个随机项,用于Equipm方法 每当我使用我的测试仪时,当我尝试调用random获取大小时,终端窗口打印ArrayList中的get Random有java.lang.IllegalArgumentException错误:n必须为正,java,arraylist,Java,Arraylist,在我的ArrayList中,我从ArrayList中获得了一个随机项,用于Equipm方法 每当我使用我的测试仪时,当我尝试调用random获取大小时,终端窗口打印java.lang.IllegalArgumentException:n必须为正 我试图将totalElements的值更改为元素的整数大小,那么错误将是outofboundseption import java.util.*; import java.util.Scanner; import java.util.Random; pu
java.lang.IllegalArgumentException:n必须为正
我试图将totalElements的值更改为元素的整数大小,那么错误将是outofboundseption
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;
}
import java.util.*;
导入java.util.Scanner;
导入java.util.Random;
公共类游戏大师{
私有int-turn,totalElements;
私有布尔赢家;
私人化身x1;
私人化身x2;
私有ArrayList目录;
公共游戏大师(阿凡达a1、阿凡达a2)
{
x2=a1;
x1=a2;
圈数=1;
胜利者=假;
库存=新的ArrayList();
总元素=0;
}
私有库存()
{
添加(新项目(“狂热者之刃”,正确,8));
添加(新项目(“BFG”,正确,13));
增加(新项目(“合成布”,假,7));
//更多项目
添加(新项目(“高斯步枪”,正确,9));
添加(新项目(“飞行单位”,假,6));
totalElements=inventory.size();
}
公共字符串设备()
{
化身w;
字符串a;
如果(回合%2==1)
w=x2;
其他的
w=x1;
如果(w.beltIsFull())
{
a=w.getName()+““的皮带已满。\n”;
}
其他的
{
turn++;
随机生成器=新随机();
Item rand=inventory.get(generator.nextInt(totalElements));
//blueJ:java.lang.IllegalArgumentException:n中的终端窗口必须为正
a=w.getName()+“配备有“+rand.getName()+”;
}
返回a;
}
例外情况是告诉您,totalElements
小于或等于零。我认为这是因为您尚未初始化它。(我可以看到fillInventory
方法,但我看不到您的代码在哪里调用它…)我试图将totalElements更改为清单中的元素数,错误变为java.lang.IndexOutOfBoundsException:Index:27,Size:0这表示在引发异常时,清单对象实际上包含零个元素。