所以我的数组当前分配了5个骰子对象的实例。我的问题是我有另一个需要锁定骰子的类。
public class Yahtzee {
OneDice[] dice = new OneDice[5];
public Yahtzee() {
yahtzeeRoll(); //constructor
}
public void yahtzeeRoll() {
for (int i = 0; i != dice.length; i++) {
dice[i] = new OneDice();
}
public void lock(int which) {
dice[which - 1].lockDice();
}
}
然而我的骰子[i] =新的OneDice();每次调用yahtzeeRoll时都会创建一组全新的随机数。
这是传递which参数的方法。
@Override
public void choose() {
int which;
Scanner sc = new Scanner(System.in);
System.out.println(getName() + " Rolling.");
hand.printYahtzee();
System.out.println("Would you like to lock dice 1? 1 for yes");
choice = sc.nextInt();
if (choice == 1) {
which = 1;
hand.lock(which);
}
如何为每个骰子索引分配一个随机值,而无需创建一个否定锁定的全新卷组。至少那对我来说似乎是个问题?
答案 0 :(得分:2)
听起来你需要跳过 锁定的条目:
for (int i = 0; i < dice.length; i++) {
if (dice[i] == null || !dice[i].isLocked()) {
dice[i] = new OneDice();
}
}
或者更改您的代码以使用新实例在构造函数中初始化dice
,但是让您的yahtzeeRoll
方法只更改在现有的未锁定实例中的值,而不是创建新的实例。例如:
public Yahtzee() {
for (int i = 0; i < dice.length; i++) {
dice[i] = new OneDice();
}
rollUnlocked();
}
public void rollUnlocked() { // Renamed from yahtzeeRoll for clarity
for (OneDice die : dice) {
die.rollIfUnlocked(); // Or whatever method you want
}
}
(其中rollIfUnlocked
将重新生成单个骰子,只有先前没有被锁定)。
答案 1 :(得分:0)
每次滚动时都不要重新初始化整个阵列。在玩yahtzee的现实生活中,每次滚动时都不会抓到5个新骰子。
答案 2 :(得分:0)
按如下方式创建OneDice:
class OneDice {
int value;
boolean locked;
void roll(){
if(!locked)
value = Math.nextInt(6);
}
int getValue(){
return value;
}
void setLock(boolean lock){
locked = lock;
}
boolean isLocked(){
return locked;
}
}