-5

我的任务是在 Java 程序上制作“Yahtzee”游戏。除了 Small Straight 方法外,我几乎完成了。(无法弄清楚。)

小顺是当骰子得到 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 个随机数的骰子并将它们放入“复制”对象中。由于我需要使用 java.util.List.containsAll() 方法(要求),我想我需要使另一个对象“testCase1”与“副本”进行比较。(如果你有其他方法来解决这个问题,至少你可以使用 java.util.containsAll() 方法。)

但是,我现在不知道的是,如果我使用 dice.add(new Die(3)),这意味着程序会从 1,2 和 3 中选择随机数。(不是 3 号骰子)-另外,它给了我编译时错误。

所以,我想知道如何为“testCase1”存储骰子特定数字 1、2、3 和 4,为“testCase2”存储 2、3、4 和 5,为“”存储 3、4、5 和 6 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 的 yahtzee 将变成 { 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;
}

如果您愿意,可以使用此数组在一个简短的方法中轻松确定所有有效分数,并将布尔值存储在单个数组中。

于 2013-09-28T08:42:22.933 回答