1

5 つの整数の値を分析する isThreeOfAKind() というメソッドを作成しています。このメソッドはブール値を返す必要があります。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ステートメントは奇妙ですが、1回ループするだけで(私は思う)、1〜5のランダムな値を持つ5つの整数die1、die2、die3、die4、およびdie5を取得します。

私の isThreeOfAKind() は、これらの 5 つの整数のうち 3 つが互いに等しいかどうかをどうにかして調べる必要があります。これまでのところ、私が持っているのは

public Boolean isThreeOfAKind(){

}

おそらくifステートメントが使用され、ifステートメントの要件を満たしていればtrueを返し、elseステートメントはfalseを返すと思いますが、5つの整数を比較してからコードを書く方法がわかりませんそれ。どんな助けでも大歓迎です!

4

4 に答える 4

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 の場合、スリーカードです。

return ones==3 || twos==3 || threes==3 || fours==3 || fives==3 || sixes==3;
于 2012-11-07T07:33:42.483 に答える
1

OK、配列、コレクション、スイッチ、その他の便利なものを使わない読みやすいソリューションです ;) 残りはすぐに習得してください!

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
    }

これで、サイコロ配列をループして、3 つのサイコロが同じ値かどうかを確認するのはかなり簡単になりました(1 つの方法: 可能な値を表す次元 6 の別の int 配列を作成し、サイコロをチェックして、他の配列の対応する値をインクリメントします。次に、他の配列の値のいずれかが 3 以上かどうかを確認します。

于 2012-11-07T07:30:37.020 に答える
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 に答える