Problème string qui ne ce "vide pas" JAVA
Jb
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
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
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:
- Problème string qui ne ce "vide pas" JAVA
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Supprimer page word vide - Guide
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
1 réponse
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".
Si je reprends ton code cela va donner tout simplement :
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);