2016-09-22 1 views
0

Désolé pour le titre potentiellement déroutant, c'était le meilleur que je pourrais trouver pour décrire le problème que j'ai.Comment trouver combien de valeurs dans un tableau de nombres aléatoires correspondent?

Quoi qu'il en soit, jusqu'à des punaises de cuivre: Je travaille sur une tâche Java (oui, c'est un travail de classe, écoutez-moi) pour créer un jeu de dés, appelé FiveDice2.java. Ce que je dois faire est de faire rouler cinq dés chacun pour un CPU et un joueur humain, et ensuite déterminer quel "joueur" a gagné le jeu, en déterminant s'ils ont une paire, un brelan, un brelan, etc. Mon problème réside dans cette dernière partie. Je n'arrive pas à avoir une idée de la façon d'atteindre cet objectif. Ma meilleure idée était de créer un tableau de toutes les valeurs de roulis possibles, de 1 à 6, et de comparer les jets de dés à ce tableau, et de garder trace du nombre de correspondances que chaque nombre a obtenu dans une variable séparée (int, int twos, int threes, etc.), mais plus j'y pensais, plus je réalisais combien de validation cela prendrait, et je ne peux pas m'empêcher de penser que je ne suis pas sur la bonne voie.

Ma meilleure tentative va un petit quelque chose comme ceci:

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 } 
 
}

Ce serait formidable si quelqu'un pouvait me aider à comprendre où je vais mal ou comment je devrais changer mon penser à comment faire cela; Je ne demande pas d'être nourri à la main, je voudrais juste un peu d'aide pour comprendre comment y arriver moi-même. Merci d'avance.

+1

cela facilitera l'identification de n-of-a-kind et de droites. –

Répondre

1

Eh bien, pour commencer:

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

Vous n'avez pas besoin de ce tableau. La valeur de n'importe quel index i est juste i+1 - utilisez simplement i+1 là où vous en avez besoin. D'autre part,

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

C'est ce qu'un tableau est pour. Plutôt que d'avoir six variables distinctes, vous pourriez avoir un seul tableau; quelque chose comme:

int [] valueCounts = new int[6]; 

L'idée est que le nombre de ceux qui serait en valueCounts[0], de groupes de deux seraient valueCounts[1], et ainsi de suite. Cependant, je suppose que vous voulez vraiment compter les dés de joueur et les dés de CPU séparément; Par conséquent, vous devez soit utiliser deux tableaux distincts, ou un tableau à deux dimensions:

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

(Dans ce dernier cas, valueCounts[0] représente les 6 valeur compte pour le joueur, et valueCounts[1] représente la 6 valeur countes pour la CPU - mais si vous n'avez pas encore rencontré de tableaux multidimensionnels, choisissez la première option).

Puis, au lieu de:

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

...etc, il suffit de faire:

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

En fait, vous n'avez pas besoin de cette boucle:

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

Au lieu de cela, vous devriez boucle à travers les filières elles-mêmes:

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

Le corps de la boucle peut être littéralement remplacée par deux lignes:

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

Cela incrémentera le compte de la valeur appropriée pour chaque joueur et CPU meurent à tour de rôle. Maintenant, le problème de déterminer le N pour "N-de-un-genre" est juste une question de boucle à travers le playerValueCounts (et puis le cpuValueCounts) et la recherche de la valeur la plus élevée - c'est-à-dire, la valeur qui se produit le plus souvent . Après avoir lancé les cinq dés, essayez de trier les valeurs.

+0

Merci beaucoup, cela m'a eu où je dois être. J'ai pensé qu'il me manquait quelque chose comme le tableau valueCounts. –