gpt4 book ai didi

java - 程序执行并无故停止

转载 作者:行者123 更新时间:2023-12-01 16:50:47 26 4
gpt4 key购买 nike

所以我为我的作业制作了一个扑克游戏。
一切都很好(至少我这么认为)。简单来说:玩家有 100 美元的余额,根据他的手牌,赢或输钱。
我设定了一个条件,只要玩家的余额高于 <0> ,游戏就会不断地给玩家新的手牌。
然而,重新启动七八次后,程序只是显示白色,无论你输入什么,它都会永远运行......

这是代码,希望大家能帮忙,另外,抱歉,如果大部分代码是法语,我用英语注释了这些方法,以帮助您理解:

package pkgtp2;

import java.util.*;

public class TP2 {

static boolean straight;
static boolean flush;
static int paires;
static int gains;
static int balance = 100;
static char[] cardsSymbols = new char[5];
static String[] cardsValues = new String[5];
static int hand[] = new int[5];
static boolean pack[] = new boolean[52];

public static void menu(int gains) {
System.out.println("************** " + " AUCUNE COMBINAISON = -10$");
System.out.println("*Jeu de Poker* " + " 1 PAIRE = 0$");
System.out.println("************** " + " 2 PAIRES = 20$");
System.out.println(" " + " BRELAN <3> = 35$");
System.out.println(" " + " SUITE = 50$");
System.out.println(" " + " FULL = 75$");
System.out.println(" " + " COULEUR = 100$");
System.out.println(" " + " CARRÉ = 150$");
System.out.println(" " + " STRAIGHT FLUSH = 500$");
} // The Game Menu showing every possible hand

public static void drawCards(int[] hand, boolean[] pack) {

Random give = new Random();

for (int i = 0; i < hand.length; i++) {
do {
hand[i] = give.nextInt(52);
} while (pack[hand[i]]);
pack[hand[i]] = true;
}
} // Gives the user 5 unique random numbers

public static void cardSymbol(int[] cards, char[] cardssymbols) {
char symboles[] = {'♥', '♦', '♣', '♠'};
int numOfSymbol;
for (int i = 0; i < cards.length; i++) {
numOfSymbol = cards[i] / 13;
cardsSymbols[i] = symboles[numOfSymbol];
}

} // Converts the 5 numbers into values

public static void cardValue(int[] cards, String[] cardsvalues) {
String valeurs[] = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
int numOfValues;
for (int i = 0; i < cards.length; i++) {
numOfValues = cards[i] % 13;
cardsValues[i] = valeurs[numOfValues];
}
} // Converts the 5 numbers into actual cards values

public static void printCards(char[] cardsymbols, String[] cardsvalues) {
System.out.println("Voici vos cartes : \n");
for (int i = 0; i < hand.length; i++) {
System.out.print(cardsymbols[i]);
System.out.print(cardsvalues[i] + " ");
}
} // Prints the Cards

public static void changeCards(int[] cards, boolean[] pack) {
Scanner read = new Scanner(System.in);
int cardchange = 0;
Random give = new Random();
System.out.println();

for (int i = 0; i < 4; i++) {
do {
System.out.println(" Entrez des chiffres de 1 à 5 correspondant aux cartes que vous désirez changer (vous pouvez changer au plus 4 cartes)"
+ " \n Si vous voulez conserver vos cartes, entrez 0 ");
while (!read.hasNextInt()) {
System.out.println("Veuillez entrer un chiffre ");
read.next();
}
cardchange = read.nextInt();
} while (cardchange < 0 || cardchange > 5);

if (cardchange == 0) {
i = 5;
} else {
System.out.print("\nLa carte " + cardchange + " va être changée\n ");
do {
cards[cardchange - 1] = give.nextInt(52);
} while (pack[cards[cardchange - 1]]);
pack[cards[cardchange - 1]] = true;
}

cardSymbol(cards, cardsSymbols);
cardValue(cards, cardsValues);
printCards(cardsSymbols, cardsValues);

}

} // Lets the user change up to 4 cards, press 0 to not change any card and skip

public static int checkPairs(char[] cardsSymbols, String[] cardsvalues) {
int paires = 0;
for (int i = 0; i < cardsvalues.length; i++) {
for (int j = i + 1; j < cardsvalues.length; j++) {
if (cardsvalues[i].equals(cardsvalues[j])) {
paires++;
}
}
}
return paires;
} // Checks if the cards values match so the program can determine if the user has a pair, two pair, three of a kind, full house or quads

public static boolean checkFlush(char[] cardsSymbols) {
boolean flush = false;
if (cardsSymbols[0] == cardsSymbols[1] && cardsSymbols[1] == cardsSymbols[2] && cardsSymbols[2] == cardsSymbols[3] && cardsSymbols[3] == cardsSymbols[4]) {
flush = true;
}
return flush;
} // checks for a flush

public static boolean checkStraight(String[] cardsvalues) {
boolean straight = false;
int numOfValues;
int[] straightTab = new int[5];
for (int i = 0; i < hand.length; i++) {
numOfValues = hand[i] % 13;
straightTab[i] = numOfValues;
}
Arrays.sort(straightTab);

if (straightTab[0] + 1 == straightTab[1] && straightTab[1] + 1 == straightTab[2] && straightTab[2] + 1 == straightTab[3] && straightTab[3] + 1 == straightTab[4]) {
straight = true;
}
return straight;
} // checks for a straight

public static int combinaisons(int paires, boolean straight, boolean flush) {
int gains;
if (straight && flush) {
System.out.println("Vous avez une Quinte !");
gains = 500;
} else if (flush) {
System.out.println("Vous avez une Couleur !");
gains = 100;
} else if (straight) {
System.out.println("Vous avez une Suite !");
gains = 50;
} else if (paires == 6) {
System.out.println("Vous avez un Carré !");
gains = 150;
} else if (paires == 4) {
System.out.println("Vous avez un Full !");
gains = 75;
} else if (paires == 3) {
System.out.println("Vous avez un Brelan !");
gains = 35;
} else if (paires == 2) {
System.out.println("Vous avez Deux Paires !");
gains = 20;
} else if (paires == 1) {
System.out.println("Vous avez une Paire !");
gains = 0;
} else {
System.out.println("Vous n'avez Aucune Combinaison !");
gains = -10;
}
return gains;
} // gives the user money based on his hand strength

public static int profit(int gains) {
balance = balance + gains;
System.out.println("Vos gains sont de " + gains + " $");
System.out.println("Vous avez donc " + balance + " $");
return gains;
} // Gives the user his profit and his new balance

public static void main(String[] args) {
do {
menu(gains);
drawCards(hand, pack);
cardSymbol(hand, cardsSymbols);
cardValue(hand, cardsValues);
printCards(cardsSymbols, cardsValues);
changeCards(hand, pack);
paires = checkPairs(cardsSymbols, cardsValues);
flush = checkFlush(cardsSymbols);
straight = checkStraight(cardsValues);
gains = combinaisons(paires, straight, flush);
profit(gains);
}while (balance > 0);
}// Here is my problem, the program just stops for a reason ...

}

最佳答案

drawCards方法中,pack[hand[i] = true最终(大约10手之后)设置所有pack[hand[i] code> 为 true,导致 while (pack[hand[i]]); 进入无限循环。

pack[hand[i]] = true; 更改为 pack[hand[i]] = false; 可防止无限循环并允许继续游戏玩法。

正如OP在评论中建议的,一种方法是在每轮之后重置“pack”数组,这可以通过以下方法完成:

public static void reset_pack(){
for(int i=0; i<pack.length;i++){
pack[i] = false;
}
}

并在每轮之后调用此方法:

...
profit(gains);
reset_pack();

关于java - 程序执行并无故停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40621677/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com