Programme de Dés de Poker en Java
[Éditer: J'ai corrigé les deux paires et le mélange complet, mais mon score final où il n'y a pas de paires et où il affiche la valeur la plus élevée ne se déclenche pas du tout]
Je travaille sur un projet qui joue un jeu de poker dés. J'ai tout le" scoring " qui fonctionne sauf lorsque les dés lancent deux paires[Éditer: deux paires fixes], il dit que c'est une maison pleine.
Voici les instructions:
Dans ce laboratoire, vous allez écrire un programme Java qui joue au Poker Dé. Dans ce jeu, cinq dés sont lancés et marqué comme s'ils étaient une main de cartes à jouer. Le jeu passe par deux phases distinctes. Dans la première phase, une" main " de dés est présentée au joueur. Le joueur sélectionne ensuite les dés qu'il veut garder et ceux qu'il veut relancer. Une fois cette décision terminée, tous les dés que le joueur a marqués pour relancer sont lancés à nouveau et la "main" finale des dés est affichée. La main doit alors être notée selon les règles du Poker Dés (donnés ci-dessous) et le résultat affiché à l'écran.
Voici mon code pour la méthode de notation:
private static String getResult(int[] dice) {
int i = 0;
String results = "";
int endResultsCheck = 0;
int[] count = getCounts(dice);
// Checks for 5 of a kind
while (i < count.length) {
if (count[i] == 5) {
results = "Five of a kind!";
endResultsCheck = 7;
}
i++;
}
// Checks for four of a kind
i = 0;
if (endResultsCheck != 7) {
while (i < count.length) {
if (count[i] == 4) {
results = "Four of a kind!";
endResultsCheck = 6;
}
i++;
}
}
if (endResultsCheck < 6) {
// Checks for full house
i = 0;
int check = 0;
while (i < count.length) {
if (count[i] == 3) {
check++;
}
if (count[i] == 2) {
check++;
}
i++;
}
if (check == 2) {
results = "Full house!";
endResultsCheck = 5;
}
}
if (endResultsCheck < 5) {
// Checks for three of a kind
i = 0;
while (i < count.length) {
if (count[i] == 3) {
results = "Three of a kind!";
endResultsCheck = 4;
}
i++;
}
}
if (endResultsCheck < 4) {
// Checks for two pairs
i = 0;
int check = 0;
while (i < count.length) {
if (count[i] == 2) {
check++;
}
i++;
}
if (check == 2) {
results = "Two pairs!";
endResultsCheck = 3;
}
}
if (endResultsCheck < 3) {
i = 0;
while (i < count.length) {
if (count[i] == 2) {
results = "One pair!";
}
i++;
}
endResultsCheck = 2;
}
if (endResultsCheck == 0) {
i = 0;
int max = 0;
while (i < dice.length) {
if (max < dice[i]) {
max = dice[i];
}
i++;
}
results = "Highest number is " + max + "!";
}
return results;
}
Quand il se réfère à la méthode getCounts()
, c'est ce code:
private static int[] getCounts(int[] dice) {
int[] count = new int[10];
int i = 0;
int one = 0;
while (i < dice.length) {
if (dice[i] == 1) {
one++;
}
i++;
}
int two = 0;
i = 0;
while (i < dice.length) {
if (dice[i] == 2) {
two++;
}
i++;
}
int three = 0;
i = 0;
while (i < dice.length) {
if (dice[i] == 3) {
three++;
}
i++;
}
int four = 0;
i = 0;
while (i < dice.length) {
if (dice[i] == 4) {
four++;
}
i++;
}
int five = 0;
i = 0;
while (i < dice.length) {
if (dice[i] == 5) {
five++;
}
i++;
}
int six = 0;
i = 0;
while (i < dice.length) {
if (dice[i] == 6) {
six++;
}
i++;
}
int seven = 0;
i = 0;
while (i < dice.length) {
if (dice[i] == 7) {
seven++;
}
i++;
}
int eight = 0;
i = 0;
while (i < dice.length) {
if (dice[i] == 8) {
eight++;
}
i++;
}
int nine = 0;
i = 0;
while (i < dice.length) {
if (dice[i] == 9) {
nine++;
}
i++;
}
int ten = 0;
i = 0;
while (i < dice.length) {
if (dice[i] == 10) {
ten++;
}
i++;
}
count[0] = one;
count[1] = two;
count[2] = three;
count[3] = four;
count[4] = five;
count[5] = six;
count[6] = seven;
count[7] = eight;
count[8] = nine;
count[9] = ten;
return count;
}
1 answers
Essayez d'abord de déboguer (utilisez le mode de débogage réel et placez un point d'arrêt ou placez des valeurs d'impression) la partie du code ci-dessous. Votre objectif est de trouver une fissure dans une logique à l'intérieur de ce bloc de code. Ensuite essayez de mettre à jour la logique.
if (endResultsCheck < 6) {
// Checks for full house
i = 0;
int check = 0;
while (i < count.length) {
if (count[i] == 3) {
check++;
}
if (count[i] == 2) {
check++;
}
i++;
}
if (check == 2) {
results = "Full house!";
endResultsCheck = 5;
}
}
Essayez d'abord de le faire par vous-même. C'est très amusant de chasser la paix manquante.
if (count[i] == 2) {
la condition sera vraie deux fois lorsque vous avez deux paires. En conséquence check == 2
sera vrai et vous recevrez "Full house".
L'Un des possibles solution:
if (endResultsCheck < 6) {
// Checks for full house
i = 0;
boolean hasPair = false;
boolean hasTriplet = false;
while (i < count.length) {
if (count[i] == 3) {
hasTriplet = true;
}
if (count[i] == 2) {
hasPair = true;
}
i++;
}
if (hasPair && hasTriplet) {
results = "Full house!";
endResultsCheck = 5;
}
}