对象初始化 (Java)

Object initialization (Java)

假设您有一个 class 团队:

public class Team {

    public void Team() {
        Player player1 = new Player();
        Player player2 = new Player();

        if (player1.getName == "") {
            player1.setName = console.next();
        }

        else if (player2.getName == "") {
            player2.setName = console.next();
        }

    }
}

另一个class叫玩家:

public class Player {
    private String name;

    public void setName(String inputName) {
        name = inputName;
    }

    public String getName() {
    return name;
    }
}

如果我想为 player1 设置名称,我可以通过调用 Team() 方法来实现。但是如果我想为 player2 设置一个名称,它会重置 player1 的名称,因为每次调用该方法时它都会创建一个新的 player1 和 player2 对象,对吗?

所以我的问题是,如果我只想在第一次 运行 Team() 方法时初始化 player1 和 player2 对象,我该如何实现?因为如果我将对象初始化移出团队 class,我将无法访问 getName 和 setName。

我对此很陌生,因此非常感谢任何帮助,例如实现此目的的替代方法(不使用数组)!谢谢

你应该明白TeamPlayer之间的关系。

在您当前的实现中,一个 Team 有两个 Player,我会将初始化移至构造函数:

public class Team {

    private Player player1;
    private Player player2;

    public Team(Player player1, Player player2) {
        this.player1 = player1; 
        this.player1 = player2;   
    }
}

player1player2的初始化应该在某个driver中完成,一个class应该负责初始化Players 并将它们设置为一个团队。

Setting/getting玩家的名字应该写在Playerclass,而不是Teamclass,因为Team是只对团队负责,不对Player细节负责。

我会更改 Team class 以包含 X Player 而不仅仅是 2 个,将来扩展这个 class 会更容易。

重要说明:使用 equals 比较字符串,== 比较引用而不是字符串的内容。

public class Team {

Player player1, player2;

public void Team() {
    player1 = new Player();
    player2 = new Player();
}

public void Team(Player p1, Player p2) {
    player1 = p1;
    player2 = p2;
}

public void setPlayer1(String name) {    
    if (!name.isEmpty()) {
        player1.setName = name;
    }
}

public void setPlayer2(String name) {    
    if (!name.isEmpty()) {
        player2.setName = name;
    }
}

public String getPlayer1Name() {
    get player1.getName();
}

public String getPlayer2Name() {
    get player2.getName();
}

然后做类似的事情

Team team = new Team();
team.setPlayer1("john");
team.setPlayer2("jane");

Team team = new Team("john", "jane");

这就是您正确编写代码的方式,

如果你假设一个团队可以有任意数量的球员,并且你通过添加球员来建立一个球队,你可以这样写。

public class Team {
    private final List<Player> players = new ArrayList<>();
    public void add(Player player) { players.add(player); }
}

public class Player {
    final String name;
    public Player(String name) { this.name = name; }
    public String getName() { return name; }
}

// in your main or another method.
Team team = new Team();
while(/* more players */) {
    team.add(new Player(console.next()));
}

通过这种方式,您可以为读入的每个名称添加任意数量的玩家。