2016-09-22 6 views
0

多分混乱しているタイトルのため申し訳ありませんが、それは私が持っている問題を説明するために思い付くことができた最高でした。乱数の配列の中のいくつの値が一致するのか?

とにかく、真鍮のタックに至るまで:私はFiveDice2.javaと呼ばれるサイコロのゲームを作成するために、Javaの割り当て(はい、これはクラスワークで、聞いてください)に取り組んでいます。私がする必要があるのは、CPUと人間のプレイヤーのためにそれぞれ5つのサイコロを振って、どのプレイヤーがゲームに勝ったのか、それらがペアを持っているかどうか、種類が2種類、種類が3種類あるかどうかを判断することです。私の問題は最後の部分にあります。私は実際にその目標を達成する方法のアイデアを得るように見えることはできません。

考えられるすべてのロール値1-6の配列を作成し、ダイスロールをその配列と比較して、各数値が別々の変数にどれだけ一致したかを記録しておくこと(int ones、 int thos、int threesなど)、しかし、私はそれについてもっと考えていれば、どれくらいのバリデーションが実現するのかが分かりました。私は正しい道にないと感じています。誰かが私が間違っているつもりですか、私は私を変更する方法をどこに私が理解するのに役立つことができればそれは素晴らしいことだ

public class FiveDice2 
 
{ 
 
\t public static void main(String[] args) 
 
\t { 
 
     //Declare arrays for cpu and player dice 
 
     Die[] cpuDice = new Die[5]; 
 
     Die[] playerDice = new Die[5]; 
 
     int possibleValues = new int[]{1,2,3,4,5,6}; 
 
     int ones, twos, threes, fours, fives, sixes; 
 
     int cpuHand, playerHand; 
 
     
 
\t \t //Instantiate five Dice objects for the "CPU" 
 
     for(cpu = 0; cpu < cpuDice.length; cpu++) 
 
     { 
 
      cpuDice[cpu] = new Die(); 
 
     } 
 

 
\t \t //Instantiate five more Dice objects for the player 
 
     for(p = 0; p < cpuDice.length; p++) 
 
     { 
 
      playerDice[p] = new Die(); 
 
     } 
 

 
\t \t //Print rules of game to the console 
 
\t \t System.out.println("Dice Game"); 
 
\t \t System.out.println("Two sets of dice will be thrown."); 
 
\t \t System.out.println("Winner is determined by who has the better \"hand\" of dice."); 
 
\t \t System.out.println("Each combination in the table beats all the ones below it: "); 
 
\t \t System.out.println("-Five of a kind"); 
 
\t \t System.out.println("-Four of a kind"); 
 
\t \t System.out.println("-Three of a kind"); 
 
\t \t System.out.println("-Pair"); 
 
\t \t System.out.println("If none of the above, whoever has the highest total wins."); 
 

 
\t \t //Output values of the "CPU's" rolls 
 
     System.out.println("CPU dice:"); 
 
     for(cpu = 0; cpu < cpuDice.length; cpu++) 
 
     { 
 
      System.out.println(cpuDice[cpu].getDieValue()); 
 
     } 
 
     
 
     System.out.println(); 
 

 
\t \t //Output values of the player's rolls 
 
     System.out.println("Player dice:"); 
 
     for(p = 0; p < playerDice.length; p++) 
 
     { 
 
      System.out.println(playerDice[p].getDieValue()); 
 
     } 
 
     
 
     System.out.println(); 
 
     
 
     for(int i = 0; i < possibleValues.length; ++i) 
 
     { 
 
       if(cpuDice[i] == possibleValues[i]) 
 
       { 
 
        if(cpuDice[i] == 1) 
 
        { 
 
         ones++; 
 
        } 
 
        if(cpuDice[i] == 2) 
 
        { 
 
         twos++; 
 
        } 
 
        if(cpuDice[i] == 3) 
 
        { 
 
         threes++; 
 
        } 
 
        if(cpuDice[i] == 4) 
 
        { 
 
         fours++; 
 
        } 
 
        if(cpuDice[i] == 5) 
 
        { 
 
         fives++; 
 
        } 
 
        if(cpuDice[i] == 6) 
 
        { 
 
         sixes++; 
 
        } 
 
       } 
 
      
 
       if(playerDice[i] == possibleValues[i]) 
 
       { 
 
        if(playerDice[i] == 1) 
 
        { 
 
         ones++; 
 
        } 
 
        if(playerDice[i] == 2) 
 
        { 
 
         twos++; 
 
        } 
 
        if(playerDice[i] == 3) 
 
        { 
 
         threes++; 
 
        } 
 
        if(playerDice[i] == 4) 
 
        { 
 
         fours++; 
 
        } 
 
        if(playerDice[i] == 5) 
 
        { 
 
         fives++; 
 
        } 
 
        if(playerDice[i] == 6) 
 
        { 
 
         sixes++; 
 
        } 
 
       } 
 
     } 
 
\t } 
 
}

私の最高の試みは、このような小さなものですこれを行う方法について考えてみてください。私は答えを手に入れることを求めていません、私はそこにどうやって行くのかを理解する助けがほしいと思います。前もって感謝します。

+1

5つのサイコロを転がした後、値をソートしてみてください。これは、n-of-a-kindとstraightsの識別を容易にします。 –

答えて

1

まあ、まず第:

int possibleValues = new int[]{1,2,3,4,5,6}; 

あなたはその配列を必要としません。任意のインデックスiの値はちょうどi+1なので、必要なところでi+1を使用してください。一方、

int ones, twos, threes, fours, fives, sixes; 

これは、アレイがためは何かということです。 6つの別々の変数を持つのではなく、1つの配列を持つことができます。以下のようなもの:

int [] valueCounts = new int[6]; 

アイデアはそうでvalueCounts[1]であること、そしてだろう補数の、ものの数がvalueCounts[0]になることです。しかし、あなたは実際にプレイヤーのダイスとCPUのダイスを別々にカウントしたいと思っています。従って、2つの別々のアレイ、又は二次元アレイを使用する必要があり、次のいずれか

int [] playerValueCounts = new int[6]; 
    int [] cpuValueCounts = new int[6]; 
    // or just: 
    int [][] valueCounts = new int[2][6]; 

を(後者の場合、valueCounts[0]はプレーヤーのための6値の数を表し、そしてvalueCounts[1]は、CPUのための6値countes - を表しますまだ多次元配列に遭遇していない場合は、最初のオプションを使用してください)。その後

、代わりに:

   if(cpuDice[i] == 1) 
       { 
        ones++; 
       } 
       if(cpuDice[i] == 2) 
       { 
        twos++; 
       } 

...など、ただの操作を行います。

cpuValueCounts[cpuDice[i].getDieValue() - 1]++; 

実際には、あなたがこのループは必要ありません。代わりに

for(int i = 0; i < possibleValues.length; ++i) 

を、あなたべき金型そのものをループ:

for(int i = 0; i < playerDice.length; ++i) 

体の文字通り2つの線で置換することができます:

playerValueCounts[playerDice[i].getDieValue() - 1]++; 
cpuValueCounts[cpuDice[i].getDieValue() - 1]++; 

これは、各プレーヤーとCPUダイの適切な値のカウントを順番に増やします。さて、「N-of-a-kind」のNを決定する問題は、playerValueCounts(そして次にcpuValueCounts)をループして最も高い値、すなわち最も頻繁に発生する値の数。

+0

ありがとう、これは私がする必要がある私を得た。私は、valueCounts配列のようなものが見つからないと思った。 –

関連する問題