有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java中使用getter传递值失败

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

但它没有超过这个值。我从NimAIPlayer中得到了IllegalArgumentException: bound must be greater than origin,因为它的边界和原点不能是相同的值。原因可能是什么

下面是NimAIPlayer类的一部分

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课程的一部分

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;
}

非常感谢您的帮助


共 (2) 个答案

  1. # 1 楼答案

    当你实例化nimGame类时,你使用了默认的构造函数,它没有实例化值。 这将使值为空。 首先实例化nimGame类中的值

    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;
    }
    
  2. # 2 楼答案

    在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