使用 getter 传递值在 java 中失败

use getter to pass value failed in java

我是初学者,有两个 class 我想使用 getter 从另一个 class 传递字段值。因此,我做了这样的事情 How do getters and setters work?

但是没有传值。我从 NimAIPlayer 得到 IllegalArgumentException: bound must be greater than origin 因为它的边界和原点不能是相同的值。可能是什么原因?

这是NimAIPlayerclass

的一部分
public class NimAIPlayer extends NimPlayer implements Testable {

NimGame nimGame = new NimGame();
private int stoneTaken;


public int moveStone() {
    int balance = nimGame.getStoneBalance();
    int initialStone = nimGame.getInitialStone();
    int upperBound = nimGame.getUpperBound();
    if (initialStone == balance) {
        stoneTaken = ThreadLocalRandom.current().nextInt(1, upperBound + 1);
        return stoneTaken;

    } else if (balance < upperBound){
        stoneTaken = ThreadLocalRandom.current().nextInt(1,  + balance + 1);
        return stoneTaken;

    } else if (balance >= upperBound){
        stoneTaken = ThreadLocalRandom.current().nextInt(1, upperBound + 1);
        return stoneTaken;
    }
    return -1;
}

这是我的一部分 NimGame class

public class NimGame extends Nimsys {

NimPlayer player1;
NimPlayer player2;

int stars;
int stoneBalance;
int initialStone;
int upperBound;
int takeStone;

public NimGame() {

}

public NimGame(NimModel nimModel, int initialStone, int upperBound , NimPlayer player1, NimPlayer player2) {
    this.initialStone = initialStone;
    this.upperBound = upperBound;
    this.player1 = player1;
    this.player2 = player2;
}

public int getInitialStone() {
    return initialStone;
}

public int getUpperBound() {
    return upperBound;
}

public int getStoneBalance() {
    return stoneBalance;
}

非常感谢任何帮助。

当您实例化 nimGame class 时,您使用了未实例化值的默认构造函数。 这将使值变为空。 首先实例化 nimGame class 中的值。

public class NimGame extends Nimsys {

NimPlayer player1;
NimPlayer player2;

int stars;
int stoneBalance;
int initialStone;
int upperBound;
int takeStone;

public NimGame() {
stars = default_value;
stoneBalance = default_value;
initialStone = default_value;
upperBound = default_value;
takeStone = default_value;
}

public NimGame(NimModel nimModel, int initialStone, int upperBound , NimPlayer player1, NimPlayer player2) {
    this.initialStone = initialStone;
    this.upperBound = upperBound;
    this.player1 = player1;
    this.player2 = player2;
}

public int getInitialStone() {
    return initialStone;
}

public int getUpperBound() {
    return upperBound;
}

public int getStoneBalance() {
    return stoneBalance;
}

在NimGame中添加参数化构造函数class

NimGame.java

public NimGame(NimModel nimModel, int initialStone, int upperBound , NimPlayer player1, NimPlayer player2 , int stoneBalance) {
            this.initialStone = initialStone;
            this.upperBound = upperBound;
            this.player1 = player1;
            this.player2 = player2;
            this.stoneBalance = stoneBalance;

        }

NimAIPlayer.java

您可以使用参数化构造函数像这样初始化 NimGame 对象

NimGame nimGame = new NimGame(new NimModel(),10,15,new NimPlayer(),new NimPlayer(),8);

使用 NimGame nimGame = new NimGame() 将使用默认值初始化所有字段,例如对象类型为 null,int 类型为 0。当您在 moveStone 方法中打印时,这将导致 所有整数字段都为 0