如何在arraylist <object>中添加不同类型的值?

时间:2016-10-31 11:52:26

标签: java

所以基本上我有一个

public class Tournament {

private int [] par; // stores par for each hole in the golf course.
private ArrayList<Player> players; // stores the list of players.

public static final int NUMHOLES = 18;  // constant.

public ArrayList<Player> getPlayers() {
    return players;
}

但是现在我要为玩家阵列列表输入名称和障碍。

public void enter(String aName, int aHandicap) {

}

如何创建enter()方法?

我试过了

//players.add(aName); players.add(aHandicap);
//players.addAll(aName, aHandicap)); 

并且没有骰子。任何帮助都得到了回应

3 个答案:

答案 0 :(得分:6)

您的抽象错误。他的名字和差点是该球员的属性。它不是列表中的属性!

因此,您向Player类添加字段,然后直接在构造函数中初始化它们,或者提供setter方法。从概念上讲,名称应该可以通过构造函数进入 - 因为名称应该是不可变的,并且在创建Player之后不会更改。而障碍可能会改变;所以有一个 setter方法将是更好的选择!

然后,您可以迭代您的Player对象列表,并在 Player 对象上调用这些setter方法,而不是列表。

换句话说:您的课程/对象是现实的模型。所以你的玩家类应该代表一个人类玩家正在等待的那些方面。鉴于模型的更大背景,这是有意义的。

即使你认为你的Player类应该知道这些事情,你仍然创建一个抽象,如:

public class EnhancedPlayer { // could extend Player
  that has those other fields

你知道,你的问题会变成:让我们一起代表属于的几条信息......将它们放在不同的列表中;和#34;普通&#34;索引意味着:东西属于一起。

最后,直接回答:你不能这样做;你不应该这样做。如果你有List<Player>,那么你只能将玩家对象添加到该列表中!

答案 1 :(得分:2)

name的{​​{1}}和handicap是其身份的一部分,因此它们应该是班级Player的两个字段,所以:

假设您的班级Player如下:

Player

然后您的方法public class Player { private String name; private int handicap; public Player(final String name, final int handicap) { this.name = name; this.handicap = handicap; } // Getters (and setters if needed) } 将是:

enter

答案 2 :(得分:0)

您正在尝试将字符串和数字添加到播放器列表中。

您需要先创建一个播放器,然后将播放器添加到列表中。它不会为你自动创建一个玩家只是因为你把它构建一个所需的部分。