0

初めてのポスター。これが間違って行われた場合は親切にしてください。これはJavaクラスの紹介のための完全な開示ですが、私はすでにこのプロジェクトを提出しています。間違いを修正するためにやり直したいだけです。

主な問題は、オブジェクトとクラスの基礎を理解することです。プログラムは Yahtzee の 5 サイコロをシミュレートすることになっています。サイコロ クラスを作成してから、1 から 5 の間でランダムな値をロールする 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;
}

次に、「5 つのサイコロ オブジェクトを保持する」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.valueect行で。個々のサイコロに割り当てることができる OneDice オブジェクトの 5 つの個別のインスタンスを作成するにはどうすればよいですか。私はこれが本当に基本的なものであることを知っています. テキストを読み直したり、オンラインで読んだりしましたが、理解できません。前もって感謝します。彼の話題が広すぎないことを願っています:(

完全な手順:

1 つの 6 面サイコロをシミュレートするクラスを作成します。サイコロは 1 から 6 までの値を持つことができます。コンストラクタは、サイコロにランダムな値を設定する必要があります (つまり、サイコロの値が 0 から始まってはなりません)。2 つのメソッドが必要です。ロールと呼ばれる 1 つは、サイコロをランダムに新しい値に設定します。もう 1 つは value と呼ばれ、サイコロの現在の値を返します。

5 つのダイ オブジェクトを保持する Yahtzee という 2 番目のクラスを作成します。5 つのサイコロすべてを振る roll というメソッドを用意します。5 つのサイコロのそれぞれの値を表示する show というメソッドを用意します。

メイン クラスは、5 つのサイコロを振って結果を表示し、ユーザーにもう一度サイコロを振るかどうかを尋ねます。

4

2 に答える 2

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 に答える
1

ArrayList次のように、またはを作成しArrayて値を保持し、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 に答える