Forum Clubic

Boucle if avec un return

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 :wink:

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é :wink: 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 :wink:

Bon, comme je suis super super luné :wink:

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 :smiley:

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.