无法调用数组类型的add

时间:2015-05-04 11:26:04

标签: java arrays

我已经给了一些代码来修补,这是一个囚犯困境游戏最初是玩家用这段代码设置成阵列。

api

我正在尝试将其替换为:

IPDPlayer[] currentPlayers = { new RandomPlayer(),  
                                    new TFTPlayer(),  new TFTPlayer(), new TFTPlayer(), 
                                    new CoopPlayer(), new CoopPlayer(), new CoopPlayer(),
                                    new UncoopPlayer(), new UncoopPlayer(), new UncoopPlayer()};

一旦程序开始,选择球员的数量和类型。但是我只是得到错误 “无法在数组类型IPDPlayer []”

上调用add(TFTPlayer)

2 个答案:

答案 0 :(得分:2)

请参阅JLS 10.2. Array VariablesJLS 10.6. Array Initializers

  

要构造的数组的长度等于由数组初始值设定项的大括号直接包围的变量初始值设定项的数量。为该长度的新数组分配空间。如果没有足够的空间来分配数组,则通过抛出OutOfMemoryError突然完成对数组初始化程序的评估。否则,将创建一个具有指定长度的一维数组,并将该数组的每个组件初始化为其默认值(§4.12.5)。

您正在初始化一个大小为0的数组,并且您正在以错误的方式访问数组,您必须在声明它时给出数组的大小:

IPDPlayer[] currentPlayers = new IPDPlayer[sizeOfArray]; 

更好地使用ArrayList为您的工作,如:

List<IPDPlayer> currentPlayers = new ArrayList<IPDPlayer>();
Scanner sc1 = new Scanner(System.in);
System.out.println(" How many Tit-for-Tat?");
int in_value = sc1.nextInt();
for(int x = 0; x < in_value; x++)
{
    currentPlayers.add(new TFTPlayer());
}

如果你想从List中返回数组,请使用以下代码:

currentPlayers.toArray(new IPDPlayer[0]);

答案 1 :(得分:0)

为什么你想在一开始就拥有一个阵列;使用列表,输入结束后,您始终可以将其转换为数组。

List<IPDPlayer> ipdPlayerLst = new ArrayList<IPDPlayer>();
ipdPlayerLst .add(.....);

IPDPlayer[] currentPlayers = new IPDPlayer[ipdPlayerLst .size()];
currentPlayers =ipdPlayerLst.toArray(currentPlayers );