-5

私の課題は、Java プログラムで「ヤッツィー」ゲームを作成することです。スモールストレート法以外はほぼ完成です。(それを理解することはできません。)

スモール ストレートとは、サイコロが 4 つのストレートの数字になった場合です。(例: 12334、23345、34556 など)

isSmallStraight メソッドのコードは次のとおりです (このコードは完成していません!):

public static boolean isSmallStraight(List<Die> dice) {

        boolean result = false;

        List<Die> copy = new ArrayList<Die>(dice);
        Collections.sort(copy);

        List<Die> testCase1 = new ArrayList<Die>();
        testCase1.add(new Die(1));
        testCase1.add(new Die(2));
        testCase1.add(new Die(3));

        if(copy.containsAll(testCase1)) {
            result = true;
            System.out.println(result);
        }

        return result;

    }

ここでやりたいことは、メイン メソッド (List dice) から 5 つの乱数のサイコロを渡し、それらを "copy" オブジェクトに入れることです。java.util.List.containsAll()メソッド(必須)を使う必要があるので、「copy」と比較するオブジェクト「testCase1」をもう1つ作る必要があると思います。(この質問を解決する他の方法がある場合は、少なくとも java.util.containsAll() メソッドを使用するだけで問題ありません。)

ただし、dice.add(new Die(3)) を使用する場合、プログラムが 1、2、および 3 から乱数を選択することを意味します。(3 のダイではありません) - また、それはコンパイル時エラーが発生しました。

そこで、"testCase1" にはサイコロ固有の番号 1、2、3、および 4、"testCase2" には 2、3、4、および 5、" testCase3" を使用し、copy.containsAll(testCase1) を使用すると true になります。

できるだけ早く助けてください!

PS。金型のクラスは、私の教授によって既にプログラムされています。(したがって、Die クラスでは何も変更できません)。

4

2 に答える 2

5

数字を aTreeSetに入れて重複を取り除き、無料で並べ替えます。

次の場合、あなたは 4 つのストレート ダイスを持っています。

  1. セットには正確に 4 つの数字が含まれます
  2. 最大と最小の差は 3
于 2013-09-23T19:33:20.010 に答える
1

私が好んで使用する方法 (大小のストレート、およびその他すべての得点) は、サイコロの値を保持する int 配列から新しい int 配列を作成することです。このような:

int[] numDice = new int[6];
for (int i: diceValues)
    numDice[i-1] += 1;

これにより、すべてのサイコロが数えられ、それぞれの数が順番に新しい配列に入れられます。たとえば、ロールした 5 つのサイコロが 3、4、3、1、および 6 の場合、新しい配列は {1, 0, 2, 1, 0, 1} になり、すべて 4 のヤッツィーは { 0、0、0、5、0、0}。この新しい配列から、すべてのスコアを決定するのはかなり簡単です。ストレートの場合:

int straightCount = 0;
for (int i: numDice) {
    if (i > 0)
        straightCount++;
    else
        straightCount = 0;
    if (straightCount > 3)
        smallStraight = true;
    if (straightCount > 4)
        largeStraight = true;
}

必要に応じて、この配列を使用して、1 つの短いメソッドですべての有効なスコアを簡単に決定し、ブール値を 1 つの配列に格納できます。

于 2013-09-28T08:42:22.933 に答える