0

第一次海报。因此,如果这样做不正确,请善待。完全公开这是一个介绍性的java类但是我已经把这个项目转入我只是想重新设计它来修复我的错误

主要问题只是理解对象和类的基础知识。该程序应该模拟 Yahtzee 5 掷骰子。我需要创建一个骰子类,然后创建 5 个骰子对象,它们在 1 到 5 之间滚动随机值。目前我创建了一个名为 OneDice 的类:

public class OneDice {

    private int die;   // variable for a dice

    public OneDice() {
        roll();  //constructor
    }

    public void roll() {// random 
        die = (int)(Math.random()*6) + 1;
    }


    public int value() {

    // return the value of the die variable
    return die;
}

接下来,我们将创建一个“容纳五个骰子对象”的 Yahtzee 类,这是我创建的:

public class Yahtzee  {
    private int dice1;
    private int dice2;
    private int dice3;
    private int dice4;
    private int dice5;

    public Yahtzee(){
          yahtzeeRoll(); //constructor
    }

    public void yahtzeeRoll(){          
         OneDice diceA = new OneDice();
         OneDice diceB = new OneDice();
         OneDice diceC = new OneDice();
         OneDice diceD = new OneDice();
         OneDice diceE = new OneDice();
         dice1 = diceA.value(); 
         dice2 = diceB.value(); 
         dice3 = diceC.value();
         dice4 = diceD.value();
         dice5 = diceE.value();
    }

    public void printYahtzee(){ //prints the dices and graphics
       System.out.println("dice 1 comes up= " + dice1);
       System.out.println("dice 2 comes up= " + dice2);
       System.out.println("dice 3 comes up= " + dice3);
       System.out.println("Dice 4 comes up= " + dice4);
       System.out.println("Dice 5 comes up= " + dice5);
    }

现在我明白这是可怕的编码。随着dice1 = diceA.value等线。如何创建可以分配给每个单独骰子的 OneDice 对象的五个单独实例。我知道这是非常基本的东西。我曾尝试重读我的教科书并在线阅读内容,但无法弄清楚。提前致谢。我希望他的话题不要太宽泛:(

完整说明:

创建一个模拟单个六面模具的类。骰子的值可以从 1 到 6。构造函数应将骰子设置为随机值(即骰子不应从零值开始)。它应该有两种方法。一,称为掷骰,随机将骰子设置为新值。另一个称为 value,返回骰子的当前值。

创建第二个名为 Yahtzee 的类,其中包含五个骰子对象。有一个名为 roll 的方法可以掷出所有五个骰子。有一个名为 show 的方法来显示五个骰子中每个骰子的值。

您的主类应该掷五个骰子,显示结果,然后询问用户是否要再次掷骰子。

4

2 回答 2

1

您可以创建 anArrayList或 anArray来保存值并使用 for 循环来创建值并使用 for 循环来打印值,如下所示:

    import java.util.ArrayList;
import java.util.List;

public class Yahtzee {

    // Two options, either keep a list of dices, or a list of the value of
    // dices, the first option is more sensible to me
    // Option 1
    private List<OneDice> dices;

    public Yahtzee(int numberOfRolls) {
        this.dices = new ArrayList<>();
        yahtzeeRoll(numberOfRolls);
    }

    public void yahtzeeRoll(int numberOfRolls) {
        for (int i = 0; i < numberOfRolls; i++) {
            OneDice dice = new OneDice();
            dices.add(dice);
        }
    }

    public void printYahtzee() {
        for (OneDice dice : dices) { // This is an enhanced for loop
            System.out.println("Dice rolled: " + dice.value());
        }
    }

    public static void main(String[] args) {
        Yahtzee yahtzeeGame = new Yahtzee(5);
        yahtzeeGame.printYahtzee();
    }
    }
于 2013-08-01T21:24:56.157 回答
1

我会重写你的 Yhatzee 类以利用这样的数组(这假设你想保留单独的骰子实例,我个人会这样,以便我以后可以回忆特定骰子的值,但是如果这永远没有必要,你有没有具体理由这样做);

public class Yahtzee  {
    private Dice[] dice;
    private final int DICE_COUNT=5;
    public Yahtzee(){
        dice=new Dice[DICE_COUNT];
        for(int i =0;i<DICE_COUNT;i++)
            dice[i] = new Dice();
        yahtzeeRoll(); //constructor
    }
    public void yahtzeeRoll(){         
        for(int i =0;i<DICE_COUNT;i++)
            dice[i].roll();
    }
    public void printYahtzee(){ //prints the dices and graphics         
        for(int i =0;i<DICE_COUNT;i++)
            System.out.println("dice "+(i+1)+" comes up= " + dice[i].value());
    }
}
于 2013-08-01T21:19:19.340 回答