[java]pb avec boolean
domxaline
-
domxaline -
domxaline -
Bonjour,
j'ai écrit ce prg en exécutant j' ai les erreurs suivant
Let's play a game,I'll pick a nb between
1 and 100,and you try to guess it
What is your first guess?
50
That's too high Try again
25
That's too high Try again
15
That is too bas, try again
20
That's too high Try again
18
That's too high Try again
16
You didn't get the nb in 6 guesses
You lose.My nb was 17
Would you like to play again
y
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextBoolean(Unknown Source)
at Textprg.Guessingame1.main(Guessingame1.java:15)
aidez moi s'il vous plaît
aidez
j'ai écrit ce prg en exécutant j' ai les erreurs suivant
Let's play a game,I'll pick a nb between
1 and 100,and you try to guess it
What is your first guess?
50
That's too high Try again
25
That's too high Try again
15
That is too bas, try again
20
That's too high Try again
18
That's too high Try again
16
You didn't get the nb in 6 guesses
You lose.My nb was 17
Would you like to play again
y
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextBoolean(Unknown Source)
at Textprg.Guessingame1.main(Guessingame1.java:15)
aidez moi s'il vous plaît
package Textprg;
import java.util.Scanner;
public class Guessingame1
{
public static void main(String[]args)
{
System.out.println("Let's play a game,I'll pick a nb between");
System.out.println("1 and 100,and you try to guess it");
boolean playagain;
do{
playgame();
System.out.println("Would you like to play again");
Scanner sc=new Scanner(System.in);
playagain=sc.nextBoolean();
}while(playagain);
System.out.println("Thanks for playing.Goodbye.");
}
static void playgame()
{
int computersnb;
int usersguess;
int guesscount=0;
computersnb=(int)(100*Math.random())+1;
System.out.println("");
System.out.println("What is your first guess?");
while(true)
{
Scanner sc1=new Scanner(System.in);
usersguess=sc1.nextInt();
guesscount++;
if(usersguess==computersnb)
{
System.out.println("You get in "+guesscount+" Guesses!My nb was "+computersnb);
break;
}
if (guesscount==6)
{
System.out.println("You didn't get the nb in 6 guesses");
System.out.println("You lose.My nb was "+computersnb);
break;
}
if(usersguess<computersnb)
System.out.println("That is too bas, try again");
else if(usersguess>computersnb)
System.out.println("That's too high Try again");
}
System.out.println("");
}
}
aidez
A voir également:
- [java]pb avec boolean
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Waptrick java bible - Forum Téléchargement
11 réponses
Apparament, le problème vient de " sc.nextBoolean() ".
Dans ton cas sc vaut "y", or d'après ce que j'ai pu voir sur le net, il faut taper "true" ou "false"et non pas "y" ou "n".
Il faut que tu trouve un moyen de dire en gros :
if (scanner = "y") { scanner = "true" }
if (scanner = "n") { scanner = "false" }
si tu veux garder une réponse en "y" et "n"... Après je suis vraiment pas copain avec les Scan, BufferReader et trucs dans le genre pour te dire la synthaxe exact.
Source : https://www.scribd.com/document/7385864/LES-CLASSES-Scanner-String-StringBuffer-StringTokenizer-Et-Math
Dans ton cas sc vaut "y", or d'après ce que j'ai pu voir sur le net, il faut taper "true" ou "false"et non pas "y" ou "n".
Il faut que tu trouve un moyen de dire en gros :
if (scanner = "y") { scanner = "true" }
if (scanner = "n") { scanner = "false" }
si tu veux garder une réponse en "y" et "n"... Après je suis vraiment pas copain avec les Scan, BufferReader et trucs dans le genre pour te dire la synthaxe exact.
Source : https://www.scribd.com/document/7385864/LES-CLASSES-Scanner-String-StringBuffer-StringTokenizer-Et-Math
Alors déjà 3 choses :
1- "That is to bas", ca veut rien dire ^^ C'est du franglais...
2- Ton code ne fait pas de gestion de mauvaise saisie... Si quand tu demande de taper un chiffre, tu tapes une lettre ou un mot, ca va planter ! Pour ca deux solutions:
-2.1 : La solution propre : les chiffres et lettres comporte un code ASCII, tu découpes le String recu et tu vérifie char par char que le code ASCII correspond bien a celui d'un chiffre et non pas d'une lettre ou symbole... C'est un peu chiant à faire.
-2.2 : La méthode bourrin : tu fais du Try/Catch sur la conversion en Integer de ta saisie. J'explique en algo :
try ( convertir en int ) catch ( afficher "saisir un chiffre !")
3- Tes corrections
-3.1 : Faire que l'on doive taper Y ou N pour rejouer ou quitter (plus ajout de vérif de la saisie). Remplace tout le corps de ton premier DO par :
-3.2 : Vérifier que la saisie est bien un integer :
Remplace ton
par :
Par contre il faudra que tu intialises ton usersguess pour ça, donc :
Et tant qu'à faire remplace :
par (ca permet de pas afficher "too bas" ou "too high" si y'a eut une erreur de saisie) :
Voilà... Allez je retourne sur MON code Java mtn ^^
Dit moi si ca t'a servi ;)
1- "That is to bas", ca veut rien dire ^^ C'est du franglais...
2- Ton code ne fait pas de gestion de mauvaise saisie... Si quand tu demande de taper un chiffre, tu tapes une lettre ou un mot, ca va planter ! Pour ca deux solutions:
-2.1 : La solution propre : les chiffres et lettres comporte un code ASCII, tu découpes le String recu et tu vérifie char par char que le code ASCII correspond bien a celui d'un chiffre et non pas d'une lettre ou symbole... C'est un peu chiant à faire.
-2.2 : La méthode bourrin : tu fais du Try/Catch sur la conversion en Integer de ta saisie. J'explique en algo :
try ( convertir en int ) catch ( afficher "saisir un chiffre !")
3- Tes corrections
-3.1 : Faire que l'on doive taper Y ou N pour rejouer ou quitter (plus ajout de vérif de la saisie). Remplace tout le corps de ton premier DO par :
playgame();
// Permet de stocker la valeur saisie
String saisie_user = "";
// Tant que la saisie est differente de y ou n, on redemande de taper !
while(!saisie_user.equals("y") && !saisie_user.equals("n"))
{
// On dit a l'utilisateur ce qu'il doit taper, tant qu'a faire...
System.out.println("Would you like to play again (y/n)");
Scanner sc = new Scanner(System.in);
// On stocke la valeur saisie
saisie_user = sc.nextLine();
}
playagain = (saisie_user.equals("y"));
// A ce stade, saisie user vaut soit y ou n. Dans le cas de y, equals retourne true, n retourne false.
-3.2 : Vérifier que la saisie est bien un integer :
Remplace ton
usersguess=sc1.nextInt();
par :
try
{
usersguess=sc1.nextInt();
}
catch (Exception e)
{
System.out.println("Only use an integer, please !");
usersguess = -1;
}
Par contre il faudra que tu intialises ton usersguess pour ça, donc :
int usersguess;devient :
int usersguess = -1;
Et tant qu'à faire remplace :
if(usersguess<computersnb)
System.out.println("That is too bas, try again");
else if(usersguess>computersnb)
System.out.println("That's too high Try again");
par (ca permet de pas afficher "too bas" ou "too high" si y'a eut une erreur de saisie) :
if(usersguess<computersnb && usersguess != -1)
System.out.println("That is too bas, try again");
else if(usersguess>computersnb)
System.out.println("That's too high Try again");
Voilà... Allez je retourne sur MON code Java mtn ^^
Dit moi si ca t'a servi ;)
bonjour,
j'ai essayé comme tu m'a dit,il rentre pas dans le boucle 'y' ou 'n'
aide moi s'il te plaît
resultat de ce prg:
Let's play a game,I'll pick a nb between
1 and 100,and you try to guess it
What is your first guess?
50
That is too bas, try again
80
That's too high Try again
70
That's too high Try again
55
That is too bas, try again
58
That's too high Try again
56
You get in 6 Guesses!My nb was 56
j'ai essayé comme tu m'a dit,il rentre pas dans le boucle 'y' ou 'n'
aide moi s'il te plaît
package Textprg;
import java.util.Scanner;
public class Guessingame1
{
public static void main(String[]args)
{
System.out.println("Let's play a game,I'll pick a nb between");
System.out.println("1 and 100,and you try to guess it");
boolean playagain;
playgame();
String saisieuser="";
while(!saisieuser.equals("y")&& !saisieuser.equals("n"));
{
System.out.println("would you like to play again (y/n");
Scanner sc=new Scanner(System.in);
saisieuser=sc.nextLine();
}
playagain=(saisieuser.equals("y"));
}
static void playgame()
{
int computersnb;
int usersguess;
int guesscount=0;
computersnb=(int)(100*Math.random())+1;
System.out.println("");
System.out.println("What is your first guess?");
while(true)
{
Scanner sc1=new Scanner(System.in);
usersguess=sc1.nextInt();
guesscount++;
if(usersguess==computersnb)
{
System.out.println("You get in "+guesscount+" Guesses!My nb was "+computersnb);
break;
}
if (guesscount==6)
{
System.out.println("You didn't get the nb in 6 guesses");
System.out.println("You lose.My nb was "+computersnb);
break;
}
if(usersguess<computersnb)
System.out.println("That is too bas, try again");
else if(usersguess>computersnb)
System.out.println("That's too high Try again");
}
System.out.println("");
}
}
resultat de ce prg:
Let's play a game,I'll pick a nb between
1 and 100,and you try to guess it
What is your first guess?
50
That is too bas, try again
80
That's too high Try again
70
That's too high Try again
55
That is too bas, try again
58
That's too high Try again
56
You get in 6 Guesses!My nb was 56
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Normal, j'ai dit remplace le "corps de ton DO"... Toi, tu as viré le "do" !
do {
// tu colles ce que je t'ai filé et vire ce qu'il y avait avant ici
}
while (playagain)
est ce que c'est ça que tu veux que je fasse,
en compilant j'ai erreur suivantes
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Syntax error, insert "}" to complete Block
Syntax error, insert "while ( Expression ) ;" to complete DoStatement
at Textprg.Guessingame1.main(Guessingame1.java:19)
la ligne 19 est la suivante
playagain=(saisieuser.equals("y"));
en compilant j'ai erreur suivantes
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Syntax error, insert "}" to complete Block
Syntax error, insert "while ( Expression ) ;" to complete DoStatement
at Textprg.Guessingame1.main(Guessingame1.java:19)
la ligne 19 est la suivante
playagain=(saisieuser.equals("y"));
do{
playgame();
String saisieuser="";
while(!saisieuser.equals("y")&& !saisieuser.equals("n"))
{
System.out.println("Would you like to play agin(y/n)");
Scanner sc=new Scanner(System.in);
saisieuser=sc.nextLine();
}
playagain=(saisieuser.equals("y"));
}
la méthode playgame marche bien,je pense ça sera inutile de le changer,
j'ai pb seulement sur la boucle do....while
j'ai pb seulement sur la boucle do....while
Si tu suis mot à mot ce que j'ai dit, ca donne le code suivant et ca marche... ^^
Sur le coup, fait juste copier coller de ca :
Sur le coup, fait juste copier coller de ca :
import java.util.Scanner;
public class Guessingame1
{
public static void main(String[]args)
{
System.out.println("Let's play a game,I'll pick a nb between");
System.out.println("1 and 100,and you try to guess it");
boolean playagain;
do{
playgame();
// Permet de stocker la valeur saisie
String saisie_user = "";
// Tant que la saisie est differente de y ou n, on redemande de taper !
while(!saisie_user.equals("y") && !saisie_user.equals("n"))
{
// On dit a l'utilisateur ce qu'il doit taper, tant qu'a faire...
System.out.println("Would you like to play again (y/n)");
Scanner sc = new Scanner(System.in);
// On stocke la valeur saisie
saisie_user = sc.nextLine();
}
playagain = (saisie_user.equals("y"));
// A ce stade, saisie user vaut soit y ou n. Dans le cas de y, equals retourne true, n retourne false.
}
while(playagain);
System.out.println("Thanks for playing.Goodbye.");
}
static void playgame()
{
int computersnb;
int usersguess = -1;
int guesscount=0;
computersnb=(int)(100*Math.random())+1;
System.out.println("");
System.out.println("What is your first guess?");
while(true)
{
Scanner sc1=new Scanner(System.in);
try
{
usersguess=sc1.nextInt();
}
catch (Exception e)
{
System.out.println("Only use an integer, please !");
usersguess = -1;
}
guesscount++;
if(usersguess==computersnb)
{
System.out.println("You get in "+guesscount+" Guesses!My nb was "+computersnb);
break;
}
if (guesscount==6)
{
System.out.println("You didn't get the nb in 6 guesses");
System.out.println("You lose.My nb was "+computersnb);
break;
}
if(usersguess<computersnb && usersguess != -1)
System.out.println("That is too bas, try again");
else if(usersguess>computersnb)
System.out.println("That's too high Try again");
}
System.out.println("");
}
}
merci beaucoup,le prg marche,mais quand même j'ai une question
pourquoi userguess=-1,peux tu m'expliquer s'il te plaît
pourquoi userguess=-1,peux tu m'expliquer s'il te plaît
Alors il y'a plusieurs raisons :
int userguess = -1 (la création de la variable) : les modifications de userguess par la suite sont enfermées dans des blocs conditionnels ("if" et "try", quoi que je sais pas si "try" est considéré comme une conditionnelle... bref), par habitude (même par obligation de compilation ?), il faut donc initialiser la variable...
Mais la principale raison, c'est qu'il faut donner une valeur à userguess pour pouvoir distinguer le cas "l'utilisateur a mis une valeur" et "l'utilisateur a mis une valeur erronée (une lettre par ex)".
J'ai choisi arbitrairement "-1" car l'utilisateur ne va - théoriquement - pas essayer cette valeur...
En gros, userguess == -1 veut dire "si la saisie est incorrecte".
Ca permet de le distinguer du cas "la saisie est inférieure"...
Bien sûr, reste le cas où l'utilisateur saisie "-1", et ca ne lui retournera rien... Pour faire bien, il y aurait fallu soit :
- utiliser une autre variable (un boolean) pour "marquer" le cas de saisie erronée et non pas utiliser userguess,
- empecher la saisie d'un integer inférieur à 0 de la part de l'utilisateur et lui retourner "L'entier doit être supérieur ou égal à 0".
Voilà...
int userguess = -1 (la création de la variable) : les modifications de userguess par la suite sont enfermées dans des blocs conditionnels ("if" et "try", quoi que je sais pas si "try" est considéré comme une conditionnelle... bref), par habitude (même par obligation de compilation ?), il faut donc initialiser la variable...
Mais la principale raison, c'est qu'il faut donner une valeur à userguess pour pouvoir distinguer le cas "l'utilisateur a mis une valeur" et "l'utilisateur a mis une valeur erronée (une lettre par ex)".
J'ai choisi arbitrairement "-1" car l'utilisateur ne va - théoriquement - pas essayer cette valeur...
En gros, userguess == -1 veut dire "si la saisie est incorrecte".
Ca permet de le distinguer du cas "la saisie est inférieure"...
Bien sûr, reste le cas où l'utilisateur saisie "-1", et ca ne lui retournera rien... Pour faire bien, il y aurait fallu soit :
- utiliser une autre variable (un boolean) pour "marquer" le cas de saisie erronée et non pas utiliser userguess,
- empecher la saisie d'un integer inférieur à 0 de la part de l'utilisateur et lui retourner "L'entier doit être supérieur ou égal à 0".
Voilà...