如何在 Java 中确定三个骰子的顺子?

How can I determine a straight of three dice in Java?

我正在制作一个 Java 程序,该程序掷三个骰子,然后确定它是三对、顺子还是对子。如何判断是不是顺子?

static int d1, d2, d3;
static int wins, loses, ties, rounds;

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    char answer;

    welcome();
    while (answer != 'n') {
        DieGame.d1 = rollDie(1, 7);
        DieGame.d2 = rollDie(1, 7);
        DieGame.d3 = rollDie(1, 7);

        printDice(d1, d2, d3); 

        if (isTriple(d1, d2, d2)) {
            wins++;
        }

        else if (isStraight(d1, d2, d3)) {
            wins++;
        }


    }
}


public static boolean isStraight(int d1, int d2, int d3) {

    }

这里只是部分代码。显然还有其他方法,但我正在努力确定一条直线。我们还没有在阵列上,所以我不能使用它。

像这样的东西应该可以工作

public boolean isStraight(int d1, int d2, int d3) {
   int min = getMin(d1, d2, d3);
   int mid = getMid(d1, d2, d3);
   int max = getMax(d1, d2, d3);

   if((max - mid) == 1 && (mid - min) == 1) {
     return true;
   } else {
     return false;
   }
}

其中 getMin、getMid 和 getMax return 最小值、中间值和最大值。由于您还没有接触过数组,我假设您不能使用 Math.min() 等。所以,这些看起来像下面这样。

public int getMin(int d1, int d2, int d3) {
  int min = d1;
  if (d2 < min) {
    min = d2;
  }
  if (d3 < min) {
    min = d3;
  }
  return min;
}

等等...

对于这三个结果(三对、顺子或对)一个很好的提示可以使用 Set 集合(如它不接受重复的值),您可以将所有 6 个数字放入一个空集中,然后根据集的大小评估结果,我的意思是在最终和将所有 6 个值放入集中之后:

  1. 如果set的size3那么结果就是:three pair

  2. 如果set的size6那么结果就是:straight

  3. 如果set的size5那么结果就是:pair:

一个简单的示例:

Integer[] values = {1, 4, 6, 1, 6, 4};
Set<Integer> resultValues = new HashSet<Integer>();
for (Integer i : values) {
    resultValues.add(i);
}

switch (resultValues.size()) {
    case 3:
        System.out.println("Three Pairs");
        break;
    case 6:
        System.out.println("Straight");
        break;
    case 5:
        System.out.println("One Pair");
        break;
    default:
        System.out.println("Others");
}

输出:

Three Pairs
    public boolean isStraight(int d1, int d2, int d3) {
    
        int min = Math.min(d1,Math.min(d2,d3))
        int max = Math.max(d1,Math.max(d2,d3))
        if((max-min)==2)
           return true;
        else
           return false;

    }