alors tout d’abord ce post est DTC proof ( très important ici).
Bon le brief est que j’apprends java tout seul et j’ ai donc tenté de faire une appli qui marche j’ai veinement tenté de faire un Black Jack ( comme tout le monde sur calculette ) mais le mien ne marche pas sur deux trois trucs notamment l option pour relancer une autre partie.
if (autrePartie.equals(« o »)|autrePartie.equals(« O »)){
…}
System.out.println("Voulez - vous faire une autre partie ? o / n ");
autrePartie = choixAutrePartie.next();
le OU logique c est bien | parceque dans les autres conditions cela fonctionne.
Le problème est qu’il ne prend pas en compte la réponse " autrePartie "
edit : | et & ne fonctionnent que si tu leur fourni des booléens, sur des int ça effectue des operations byte à byte. Il vaut donc mieux TOUJOURS utiliser || et && pour les OU et les ET logiques http://java.sun.com/docs/books/tutorial/ja…relational.html
J’ai tout essayé mais le résultat est le même.
Encore une fois je rappele que je débute donc si y a d’ autres trucs qui ne tiennent pas la routé hésitez pas
D’ avance merci.
J’ai du mal avec ton identation mais j’ai l’impression que tes lignes 110 et 111 sont hors de ton bloc, dans ce cas c’est donc normal que ta nouvelle valeur n’est pas prise en compte
edit : j’ai un peu de mal a voir ce que tu essaye de faire avec ces lignes
premiereCarte = new Random().nextInt(11)+1;
if (premiereCarte < 12){
Normallement premiereCarte sera toujours en dessous de 12 (Random.NextInt(n) renvoi un nombre entre 0 et n-1 dont premiereCarte sera compris entre 1 et 11 (inclus)
[quote name=‘Staz’ date=’ 11 Jun 2005, 17:57’]J’ai du mal avec ton identation mais j’ai l’impression que tes lignes 110 et 111 sont hors de ton bloc, c’est donc normal que ta nouvelle valeur n’est pas prise en compte
[right][post=“367356”]<{POST_SNAPBACK}>[/post][/right][/quote]
hop hop hop ,
identation stands for what ?
Sinon pour mes lignes 110 et 111 je suis preneur pour les mettre à une autre place mais je ne vois pas où les mettre pour faire marcher cette boucle , parce là tel que c’est on a le choix de refaire une autre partie mais une fois le choix effectué rien ne se produit donc la boucle est la clé mais là je ne vois pas…
[quote name=‘Staz’ date=’ 11 Jun 2005, 17:57’]J’ai du mal avec ton identation mais j’ai l’impression que tes lignes 110 et 111 sont hors de ton bloc, dans ce cas c’est donc normal que ta nouvelle valeur n’est pas prise en compte
edit : j’ai un peu de mal a voir ce que tu essaye de faire avec ces lignes
premiereCarte = new Random().nextInt(11)+1;
if (premiereCarte < 12){
Normallement premiereCarte sera toujours en dessous de 12 (Random.NextInt(n) renvoi un nombre entre 0 et n-1 dont premiereCarte sera compris entre 1 et 11 (inclus)
[right][post=“367356”]<{POST_SNAPBACK}>[/post][/right][/quote]
J’ ai bien enlevé le " if (premiereCarte < 12){ " qui était inutile , c’est à cause des random de TurboPascal qui allait de 0-5 pour un random(6).
[quote name=‘Soltan’ date=’ 11 Jun 2005, 18:05’]Ca marcherait mieux avec une boucle, tu ne crois pas ? Le if n’est pas une boucle, le test n’est effectué qu’une fois. Utilise while…
[right][post=“367360”]<{POST_SNAPBACK}>[/post][/right][/quote]
J’ avais déjà utilisé le while et je viens de le retester mais rien n’y fait il bloque à:
( ci-dessous exemple )
** ** Ready to blackjack? ** **
Vous possédez: 1000
saisissez une mise
44
Votre première carte tirée vaut 2
Votre jeu vaut: 2
Voulez vous une autre carte? o / n
n
Votre jeu vaut: 2
Vous aviez misé: 44
Vous aviez misé: 44
Désolé la banque a eu 21
Vous perdez : 44
Vous ne possédez plus que: 956
Voulez - vous faire une autre partie ? o / n
o
[quote name=‘Soltan’ date=’ 11 Jun 2005, 18:14’]Oui, enfin DE TOUTE FACON c’est un while qu’il faut et pas un if. Demande un affichage de “autrePartie” à la fin de la boucle.
[right][post=“367366”]<{POST_SNAPBACK}>[/post][/right][/quote]
Je viens de le faire et le résultat est le même :
( désolé ca va etre lourd mais il faut que je sache si je comprends bien )
// **** boucle principale pour une autre partie **** while (autrePartie.equals(“o”)||autrePartie.equals(“O”)){
System.out.println("Vous possédez: " + porteFeuille);
// **** saisie de la mise ****
System.out.println("saisissez une mise");
int mise = choixMise.nextInt();
while (mise>porteFeuille || mise<=0){
System.out.println("Veuillez remiser s'il vous plait");
mise = choixMise.nextInt();}
// **** première carte ****
premiereCarte = new Random().nextInt(11)+1;
System.out.println("Votre première carte tirée vaut "+premiereCarte);
valeurJeu = premiereCarte;
System.out.println("Votre jeu vaut: "+valeurJeu);
// **** tirage d'une autre carte ****
System.out.println("Voulez vous une autre carte? o / n ");
String autreCarte = choixAutreCarte.next();
while (autreCarte.equals("o")|autreCarte.equals("O") &(valeurJeu<22)){
int tirageCarte = new Random().nextInt(11)+1;
System.out.println("Vous avez tiré un "+tirageCarte);
valeurJeu = valeurJeu + tirageCarte;
System.out.println("Votre jeu vaut: "+valeurJeu);
System.out.println("Voulez vous une autre carte? o / n ");
autreCarte = choixAutreCarte.next();}
// **** Jeu de de la banque (tire carte jusqu'à avoir un jeu > = 16) ****
premiereCarte = new Random().nextInt(11)+1;
valeurJeuBanque = premiereCarte;
while (valeurJeuBanque <=16){
int tirageCarte = new Random().nextInt(11)+1;
valeurJeuBanque = valeurJeuBanque+tirageCarte;}
// **** arrêt des tirages et annonce du gagnant ****
if(autreCarte.equals("n")||autreCarte.equals("N")||valeurJeu>21 ){
System.out.println("Votre jeu vaut: "+valeurJeu);
System.out.println("Vous aviez misé: "+mise);
System.out.println("Vous aviez misé: "+mise);
/* if (valeurJeu.equals(21)){
System.out.println("Bravo la banque n'a eu que "+valeurJeuBanque);
System.out.println("Vous gagnez par BLACKJACK: "+mise*5);
porteFeuille= porteFeuille + mise*5;
System.out.println("Vous possédez: "+porteFeuille);}
*/
if (valeurJeu>21 ){
System.out.println("Désolé vous avez dépassé le plafond "+valeurJeu);
System.out.println("Vous perdez : "+mise);
porteFeuille= porteFeuille - mise;
System.out.println("Vous ne possédez plus que: "+porteFeuille);
}
else if (valeurJeu>valeurJeuBanque && valeurJeu<22){
System.out.println("Bravo la banque n'a eu que "+valeurJeuBanque);
System.out.println("Vous gagnez : "+mise);
porteFeuille= porteFeuille + mise;
System.out.println("Vous possédez: "+porteFeuille);
}
else if(valeurJeuBanque>=valeurJeu && valeurJeuBanque<22){
System.out.println("Désolé la banque a eu "+valeurJeuBanque);
System.out.println("Vous perdez : "+mise);
porteFeuille= porteFeuille - mise;
System.out.println("Vous ne possédez plus que: "+porteFeuille);
}
else if (valeurJeuBanque>valeurJeu && valeurJeuBanque>21){
System.out.println("Bravo la banque a eu "+valeurJeuBanque+" et a dépassé le plafond");
System.out.println("Vous gagnez : "+mise);
porteFeuille= porteFeuille + mise;
System.out.println("Vous possédez: "+porteFeuille);
}
}
System.out.println("Voulez - vous faire une autre partie ? o / n ");
autrePartie = choixAutrePartie.next();
}
[quote name=‘Soltan’ date=’ 11 Jun 2005, 18:20’]Ajoute “System.out.println(autrePartie)” à la fin pour voir la valeur qu’il lit. Sinon, pourquoi utilises-tu 3 Scanners ? Un seul suffit.
[right][post=“367368”]<{POST_SNAPBACK}>[/post][/right][/quote]
Pour les Scanners tu as raison mais bon je découvre alors au premier abord ca me paraissait plus simple d’en avoir 3 différents mais je vais nettoyer le code plus tard.
Bon sinon l’ idée de demander un System.out.println(autrePartie) n’ est pas bête mais ca ne retrourne rien donc il ne prend pas en compte la saisie apparemment.
[quote name=‹ Soltan › date=’ 11 Jun 2005, 18:27’]A mon avis le problème vient des 3 scanners…
[right][post=« 367370 »]<{POST_SNAPBACK}>[/post][/right][/quote]
La mission UN scanner est un succès total MERCI Beaucoup Soltan , noob powa quand tu nous tiens.
Reste un dernier problème c’est le cas où le joueur à un jeu = 21 il ne m’ accepte pas mon if
/* if (valeurJeu.equals(21)){
System.out.println("Bravo la banque n’a eu que "+valeurJeuBanque);
System.out.println("Vous gagnez par BLACKJACK: "+mise5);
porteFeuille= porteFeuille + mise5;
System.out.println("Vous possédez: "+porteFeuille);}
*/
ca m’ affiche " cannot invoke equals(int) on the primitive Int "
En java int n’est pas un objet ([troll]et comme java ne fait pas l’autoboxing) donc utilise ==. Ou alors transforme ton int en Integer (qui est une surcouche objet de int)
Attention, valeurJeu est de type « int », qui est un type primitif en Java, et pas un objet de type Integer. Tu ne peux donc pas invoquer la méthode equals. 2 solutions:
soit tu fais une comparaison toute bête avec « == »
soit tu crées un objet Integer à partir de ton int:
Integer valJeuInteger = new Integer(valeurJeu)
Tu peux alors utiliser valJeuInteger.equals(…)