Problème string qui ne ce "vide pas" JAVA

Fermé
Jb - 7 déc. 2011 à 15:54
KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 - 7 déc. 2011 à 19:19
Bonjour, a tous je suis étudiant en informatique et j'ai pour projet de fin de semestre un jeu de blackjack a réaliser.
Je me heurte a un problème que je ne sais pas résoudre, en effet, je débute ma partie en créant le bon nombre de joueurs pour cette partie avec ma méthode initPartie (qui renvoi un tableau de Joueur )

public static Joueur [] initPartie(){
Joueur [] joueurs ;
String nbJoueurs = JOptionPane.showInputDialog("Quel est le nombre de joueur pour cette partie (entre 1 et 7) ?");
if(nbJoueurs.matches("[^0-9]*[0-9]+[^0-9]*") == false){
JFrame parent = new JFrame();
JOptionPane.showMessageDialog(parent, "Entrer un nombre");
initPartie();
//nbJoueurs = "";
}
System.out.print(nbJoueurs);
int argent = 900;
int [] main = {0,0,0,0,0};
int nombreJoueurs = Integer.parseInt(nbJoueurs);
joueurs = new Joueur [nombreJoueurs+1];
System.out.print(joueurs.length);
for(int i = 0; i<nombreJoueurs;i++){
String nomJoueur = JOptionPane.showInputDialog("Quel est le nom du joueurs "+(i+1)+ "?");
joueurs[i]= new Joueur (nomJoueur,argent,main);
}
joueurs[nombreJoueurs-1] = new Joueur ("Croupier",argent,main);

return joueurs;
}

mon code "fonctionne" uniquement si je ne me trompe pas dans l'entrée (i.e, si je rentre directement un nombre.
Si je me trompe dans l'entrée , après avoir pu rentrer le nom des joueurs, j'ai cette erreur qui apparait . (dans cette erreur, j'ai rentré "zdertygfdz" une premiere fois puis un chiffre.)

zjava.lang.NumberFormatException: For input string: "zdertygfdz"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at BlackJack.Main.initPartie(Main.java:18)

Je pense que utiliser la récursivité lorsque l'utilisateur ce trompe est la cause du probleme et que la string nbJoueurs "ne ce vide pas" lorsque je repasse dans ma méthode.

Je vous joins aussi le contructeur de ma classe Joueur.

class Joueur {
String nom;
int argent;
int [] main = new int [5];
int mise;
boolean continuer;
boolean perdu;

Joueur (String nom, int argentDepart, int [] main){
this.nom = nom;
argent = argentDepart;
this.main = main;
mise = 0;
continuer = true;
perdu = false;
}
}

Merci d'avance
A voir également:

1 réponse

KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
7 déc. 2011 à 19:19
Ton problème vient de ta fonction de lecture d'un entier, ton matches et ce que tu fais avec n'est pas suffisant et en plus il y a "plus simple".

public static int lireEntier(String message, int min, int max)
{
	while (true)
	{
		String str = JOptionPane.showInputDialog(
			message+" (entre "+min+" et "+max+")");
		try
		{
			int n = Integer.parseInt(str);
			
			if (n>=min && n<=max)
				return n;
			else
				JOptionPane.showMessageDialog(null, "La valeur doit être entre "+min+" et "+max, "LireEntier", JOptionPane.ERROR_MESSAGE);
		}
		catch (NumberFormatException e)
		{
			JOptionPane.showMessageDialog(null, e.toString(), "LireEntier", JOptionPane.ERROR_MESSAGE);
		}
	}
}

Si je reprends ton code cela va donner tout simplement :
int nombreJoueurs = lireEntier("Quel est le nombre de joueurs ?",1,7);
0