Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将对象指定给数组?_Java_Arrays - Fatal编程技术网

Java 如何将对象指定给数组?

Java 如何将对象指定给数组?,java,arrays,Java,Arrays,因此,我的数组当前分配了一个骰子对象的5个实例。我的问题是我有另一个类需要锁定一个骰子 public class Yahtzee { OneDice[] dice = new OneDice[5]; public Yahtzee() { yahtzeeRoll(); //constructor } public void yahtzeeRoll() { for (int i

因此,我的数组当前分配了一个骰子对象的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();
        }
  }
然而我的骰子[我]=新的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);
        }

我如何给每个骰子索引分配一个随机值,而不创建一组否定锁定的全新掷骰。至少在我看来这是个问题

听起来您需要跳过锁定的条目:


(其中,
rollIfUnlocked
将重新滚动单个模具,前提是它之前未被锁定)。

不要每次滚动时重新初始化整个阵列。在现实生活中,在玩yahtzee游戏时,你不会每次掷骰子都去抓5个新骰子。

按如下方式创建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;
   }
}

为什么你要从构造函数调用那个方法,不是在构造器本身中做初始化部分?掷骰子和创建骰子是完全不同的事情。是的,我想我可以放一些东西,跳过任何被锁定但不确定如何完成的骰子,但他后来的建议似乎是一个更好的解决方案。谢谢你,因为我对java非常陌生,有点挣扎!
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
    }
}
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;
   }
}