在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;
}
非常感谢您的帮助
# 1 楼答案
当你实例化nimGame类时,你使用了默认的构造函数,它没有实例化值。 这将使值为空。 首先实例化nimGame类中的值
# 2 楼答案
在NimGame类中添加参数化构造函数
游戏。java
NimAIPlayer。java
您可以使用参数化构造函数像这样初始化NimGame对象
使用NimGame NimGame=new NimGame()将使用默认值初始化所有字段,例如对象类型为null,int类型为0。这将导致在moveStone方法内部打印时,所有整数字段的值均为0