如何将对象分配给数组?

时间:2013-08-12 14:19:44

标签: java arrays

所以我的数组当前分配了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);
        }

如何为每个骰子索引分配一个随机值,而无需创建一个否定锁定的全新卷组。至少那对我来说似乎是个问题?

3 个答案:

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