gpt4 book ai didi

java - 如何在两个类之间传递局部变量?

转载 作者:太空宇宙 更新时间:2023-11-04 12:39:55 25 4
gpt4 key购买 nike

我正在编写一个十字和十字代码,它可以使用控制台参数来决定使用哪种策略(不同的人工智能类)。如果用户选择“ultimatecomputerplayer”,那么这将被实现为 p1/p2,具体取决于他们输入此策略和其他策略的顺序(可能是“humanplayer”等)我的问题是最终类需要知道它是哪个符号,目前游戏运行类只是将 p1 分配给 X 并将 p2 分配给 O 但我的最终类是假设它是 X 编写的,所以这提出了一个问题。

这是分配策略和交易品种的代码:

NCGridV3 theGrid = new NCGridV3(gridSize, gridSize);
GameRunnerV3 theGame = new GameRunnerV3();
Scanner sc = new Scanner(System.in);

ArrayList <NCPlayer> ret = new ArrayList <NCPlayer>();

for (int i = 1; i < args.length; i++)
{
switch (args[i])
{
case "RandomComputerPlayer":
ret.add(new RandomComputerPlayer());
break;

case "SimpleComputerPlayer":
ret.add(new SimpleComputerPlayer());
break;

case "UltimateComputerPlayer":
ret.add(new UltimateComputerPlayer());
break;

case "HumanPlayer":
ret.add(new HumanPlayer(sc, theGame));
break;
}
}

NCPlayer p1 = ret.get(0);
NCPlayer p2 = ret.get(1);

p1.setMySymbol(SquareStatus.CROSS);
p2.setMySymbol(SquareStatus.NOUGHT);

我尝试像这样分配策略的符号:

public class UltimateComputerPlayer  extends GenericPlayer implements NCPlayer 
{
public UltimateComputerPlayer()
{
super();
}

@Override
public GridCoordinate getNextMove(NCGridV3 currentGrid)
{
SquareStatus symbol = GenericPlayer.getMySymbol();

但是 Eclipse 告诉我无法对非静态方法进行静态引用。

我尝试的另一个选项是将一个整数传递到 UltimateComputer 类中,该整数将是游戏运行程序类中循环中的“i”,然后根据调用类的位置来分配符号,如下所示:

public UltimateComputerPlayer()
{
super();

SquareStatus mysymbol;
if (NC == 1)
mysymbol = NCGridV3.SquareStatus.CROSS;
if (NC == 2)
mysymbol = NCGridV3.SquareStatus.NOUGHT;
}

@Override
public GridCoordinate getNextMove(NCGridV3 currentGrid)
{
.......

但是这个变量没有在 GridCooperative 类中分配,我不知道如何创建它。

非常感谢任何帮助,谢谢。

最佳答案

第二个选项不起作用,因为 NC 未定义(至少我不知道它在哪里),而且您将符号分配给构造函数中的局部变量 SquareStatus mysymbol ,一旦您离开构造函数,该变量就会消失。首先必须将 mysymbol 设为实例变量(通过将其移至构造函数上方)。然后您可以选择在构造后使用 setter 或将数字添加到构造函数中

class UltimateComputerPlayer {
private SquareStatus mysymbol;

public UltimateComputerPlayer(int nc) {
super();


if (nc == 1)
mysymbol = NCGridV3.SquareStatus.CROSS;
if (nc == 2)
mysymbol = NCGridV3.SquareStatus.NOUGHT;
}

// [...]
}

然而,这似乎是一个通用概念,应该向上移动到父类中。另外,我会避免在类里面使用魔数(Magic Number)。决定在类外部使用什么符号,并使用符号作为参数而不是数字来调用构造函数。

正如 @VictorSorokin 所说,在您的第一个解决方案中,只需调用 getMySymbol() 而不是 GenericPlayer.getMySymbol()

关于java - 如何在两个类之间传递局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36919830/

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