gpt4 book ai didi

java - 试图创建相同对象类型的两个实例,但最终有两个变量引用相同的对象

转载 作者:行者123 更新时间:2023-12-01 14:21:05 25 4
gpt4 key购买 nike

我一直在尝试用 Java 创建一个井字游戏,以帮助我改进从头开始创建面向对象的项目。但是我遇到了一个问题,正在寻找一些指导。

我目前只完成了该项目的一半,所以我将简要介绍一下我迄今为止所做的工作。

该项目目前有一个 Game 类作为驱动程序。它有一个 Board 类,用于存储板上位置(A1、A2、A3...)及其值('X'、'O'、null)之间的映射。还有一个 Player 类,它保存玩家所在球队的字段(Xs 或 Os)和获胜次数(获胜功能尚未实现)。

我遇到的问题是从 Game 创建 Player 类的两个实例(player1 和 player2)。

我已经将它们定义为 Game 中的字段,如下所示:

public static Player player1 = new Player();
public static Player player2 = new Player();

然后要求 player1 在 Xs 和 Os 之间进行选择,而 player2 则相反。
player1.setTeam(Character.toUpperCase(teamChoice));

if(player1.getTeam() == 'X')
player2.setTeam('O');
else
player2.setTeam('X');

在我看来,这应该有效。但是,当我打印出玩家选择时,它会打印出 player2 设置的任何内容。
System.out.println("Player 1 you have selected " + player1.getTeam() + "\n");
System.out.println("Player 2 you will be " + player2.getTeam() + "\n");

Player 类的内容如下所示:
public class Player {
public static int wins = 0;
public static Character team;

public Player(){
}

public int getWins(){return wins;}

public Character getTeam(){return team;}

public void setTeam(Character team){
Player.team = team;
}

}

最佳答案

问题在这里:

public static Character team;
team是静态的,这意味着变量 team不属于任何给定的实例。它属于类。

事实上,无论何时调用 player1.setTeamplayer2.setTeam ,它是全类 team正在更改的变量,而不是特定于 player1 的变量或至 player2 .

您需要制作 team特定于实例。只需删除 static关键词。
private char team;

你也会注意到我做到了 private ,因为这是推荐的做法(您已经为它定义了一个 getter 和一个 setter,所以它不需要公开)。
另一个变化来自 Characterchar .您正在使用 == 进行比较在您的代码( if(player1.getTeam() == 'X'))的某处,使用引用类型可能会导致意外结果,此处使用原始类型是您需要进行的最简单的更改。

你的课最终看起来像
public class Player {
private int wins = 0;
private char team;

public Player() {
}

public int getWins() {
return wins;
}

public char getTeam() {
return team;
}

public void setTeam(char team) {
this.team = team;
}
}

关于java - 试图创建相同对象类型的两个实例,但最终有两个变量引用相同的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61003665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com