Bonsoir
J’ai un problème avec Java
Mon code est le suivant:
private int defVal(String valeurStr){
int val;
//Joueur j = new Joueur();
boolean valAs = true;
if(valeurStr == "1" && valAs==true){
val =1;
}else
if(valeurStr == "1" && valAs==false){
val =11;
}else
if(valeurStr == "2"){
val =2;
}else
if(valeurStr == "3"){
val =3;
}else
if(valeurStr == "4"){
val =4;
}else
if(valeurStr == "5"){
val =5;
}else
if(valeurStr == "6"){
val =6;
}else
if(valeurStr == "7"){
val =7;
}else
if(valeurStr == "8"){
val =8;
}else
if(valeurStr == "9"){
val =9;
}else
val=10;
return val;
}
Donc le problème est que la valeur retournée est forcement le dernier else.
Je soupçonne que le compileur parcours pas touts les else if pourquoi???
Pour les curieux je souhaite à partir d’un String(valeurStr) definir une valeur int ( car Integer.valueOf(“un String”) ça marche pas v___v )
Merci beaucoup
As-tu essayé sans les else et en mettant le val=10 au début du coup ?
Edité le 15/03/2009 à 01:34
Question de newbie Java non ? Allez essaye au lieu des ==
valeurStr.equals("1");
et pareil pour le reste
Réponse : String1 == String2 compare des objets et non leur valeur (leur adresse mémoire du coup). Donc forcément c’est toujours faux. Allez comme je suis bien luné je te donne un autre truc : ma proposition est incorrecte. Préfère plutôt
"1".equals(valeurStr);
Pourquoi ? Si valeurStr est Null, valeurStr.equals() provoque un NullPointerException. “1”.equals(valeurStr) répond faux
Bon, comme je suis super super luné
Je sais pas pourquoi tu fait un && false et true au début, mais au lieu de pourrir ton code avec du if else (bonjour la complexité cyclomatique), tu fait globalement :
int val = 10;
if (valeurStr != null) {
val = Integer.parsInt(valeurStr);
}
return val;
sachant que si valeurStr n’est pas un entier, tu aura un NumberFormatException à gérer ce qui peut se faire comme ça (en fait je suis pas sur du coup que tu a besoin de vérifier si valeurStr est null):
int val = 10;
if (valeurStr != null) {
try {
val = Integer.parsInt(valeurStr);
} catch NumberFormatException {
return val;
}
return val;
Et encore, pour ajouter tes conditions du début pour le 1 :
int val = 10;
if (valeurStr != null) {
try {
val = Integer.parsInt(valeurStr);
} catch NumberFormatException {
return val;
}
if (val == 1 && ! valAs) {
val = 11;
}
return val;
Voila voila
Edité le 15/03/2009 à 01:57
wow Martopioche o_O ça c’est de la réponse lol
Question de newbie Java non ? <— lol clair je suis un noob (la honte 3eme année en MIAS en plus )
En tout cas merci pour la reponse (j’ai pas encore testé mais je pense que c’est bon)
Sinon pour expliquer vite fait pour le 1: je code un jeu de b j et l’AS (le 1 ) peut valoir 1 ou 11 en fonction du boolean (il y a une methode dans ma classe Joueur qui calcule la main et renvoi true pour 1 ou false 11 et par défaut c’est false)
Ok… Alors ton algo est super pourrie. Enfin surtout ta conception
Je ne sais pas d’où tu récupère les valeurs des cartes sous forme de String, mais cette fonction ne devrait que convertir la String en int. De ce fait, le retour par défaut de “10” est une bêtise. La validation doit se faire ailleurs. Quand au calcule de la valeur de l’As, elle doit se faire lors du calcul du score, style :
As = 11
Si totalCartes > 21
alors tant que totalScore > 21 et qu’il y a des As,
| As = 1
| recalcule totalCartes
Si totalCartes > 21 > perdu.