1

我正在编写一个名为 isThreeOfAKind() 的方法来分析 5 个整数的值。此方法应返回一个布尔值。我不确定如何将其放入代码中,以便确定 5 个整数中的任何 3 个是否彼此相等。

该程序的一些背景是它在开始时生成 5 个新的随机数,这些随机数分配给整数。例如我有

public YahtzeeRoll(){
    int input;
    for (int i=5;i <= 5; i++){
        input = rangen.nextInt(5) + 1;
        die1 = input;
        input = rangen.nextInt(5) + 1;
        die2 = input;
        input = rangen.nextInt(5) + 1;
        die3 = input;
        input = rangen.nextInt(5) + 1;
        die4 = input;
        input = rangen.nextInt(5) + 1;
        die5 = input;
    }

我知道 for 语句很奇怪,但它只会让它循环一次(我认为),这给了我 5 个整数 die1、die2、die3、die4 和 die5,它们的随机值介于 1 和 5 之间。

我的 isThreeOfAKind() 应该以某种方式找出这 5 个整数中的三个是否彼此相等。到目前为止,我所拥有的只是

public Boolean isThreeOfAKind(){

}

我想也许会使用一个 if 语句,然后如果它满足 if 语句的要求,它将返回 true,然后 else 语句将返回 false,但我不确定如何比较 5 个整数然后编写代码它。任何帮助表示赞赏!

4

4 回答 4

1

好的,一个可读的解决方案,没有数组、集合、开关和其他有用的东西;)希望你很快学会剩下的!

public class YahtzeeRoll {

    public static void main(final String[] args) {
        YahtzeeRoll app = new YahtzeeRoll();
        System.out.println(app.isThreeOfAKind());
    }

    private boolean isThreeOfAKind() {
        // inspect the dice
        evaluate(die1);
        evaluate(die2);
        evaluate(die3);
        evaluate(die4);
        evaluate(die5);

        // now inspect the results
        if (val1 >= 3) return true;
        if (val2 >= 3) return true;
        if (val3 >= 3) return true;
        if (val4 >= 3) return true;
        if (val5 >= 3) return true;
        if (val6 >= 3) return true;

        return false;
    }

    private void evaluate(int die) {
        if (die == 1) val1++; 
        if (die == 2) val2++; 
        if (die == 3) val3++; 
        if (die == 4) val4++; 
        if (die == 5) val5++; 
        if (die == 6) val6++; 
    }

    int die1, die2, die3, die4, die5;
    int val1, val2, val3, val4, val5, val6;
    Random rangen = new Random();

    public YahtzeeRoll() {
        int input;
        for (int i = 0; i < 5; i++){
            input = rangen.nextInt(5) + 1;
            die1 = input;
            input = rangen.nextInt(5) + 1;
            die2 = input;
            input = rangen.nextInt(5) + 1;
            die3 = input;
            input = rangen.nextInt(5) + 1;
            die4 = input;
            input = rangen.nextInt(5) + 1;
            die5 = input;
        }
    }

}

是时候向一个新概念问好:数组 :)

public YahtzeeRoll(){
    int input;
    int[] dice = new int[5];  // <- declares and initializes an array
    for (int i=5;i <= 5; i++){
        input = rangen.nextInt(5) + 1;
        dice[i] = input;      // <- set the i'th die value to input
    }

现在很容易遍历骰子数组并检查三个骰子是否具有相同的值(一种方法:创建另一个表示可能值的维度为 6 的 int 数组,检查骰子并增加另一个数组中的相应值。然后检查其他数组的值是否大于或等于三。

于 2012-11-07T07:30:37.020 回答
1

例如,如果你String从 5 个骰子中掷出一个"25326",你可以用它StringUtils来计算每个数字的出现次数;

int ones = StringUtils.countMatches(diceString, "1");
int twos = StringUtils.countMatches(diceString, "2");
int threes = StringUtils.countMatches(diceString, "3");
int fours = StringUtils.countMatches(diceString, "4");
int fives = StringUtils.countMatches(diceString, "5");
int sixes = StringUtils.countMatches(diceString, "6");

如果其中任何一个是 3,那么您有 3 个

return ones==3 || twos==3 || threes==3 || fours==3 || fives==3 || sixes==3;
于 2012-11-07T07:33:42.483 回答
0

它非常简单

public Boolean isThreeOfAKind(){

    int input;
    int[] dice = new int[5];  // <- declares and initializes an array
    for (int i=5;i <= 5; i++){
        input = rangen.nextInt(5) + 1;
        dice[i] = input;      // <- set the i'th die value to input
    }
     java.util.Arrays.sort(dice); //sort the array
     for(int i=0;i<dice.length-3;i++)
     {
       if(dice[i]==dice[i+1] ? dice[i+1]==dice[i+2] : false)
        {
           return true;
         }
     }
     return false;
}

简而言之,对数组进行排序并查找 3 个连续整数

于 2012-11-07T07:39:08.123 回答
0
private static int[] rollDice(int[] die) {
    Random rand = new Random();
    die[0] = 1 + rand.nextInt(6);
    die[1] = 1 + rand.nextInt(6);
    die[2] = 1 + rand.nextInt(6);
    die[3] = 1 + rand.nextInt(6);
    die[4] = 1 + rand.nextInt(6);
    Arrays.sort(die);

    return die;
}

private static boolean isThreeOfAKind() {
    int[] die = new int[5];
    rollDice(die);

    return die[0] == die[2] || die[1] == die[3] || die[2] == die[4];

}
于 2015-11-27T20:05:26.387 回答