IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Caractères interdit


Sujet :

Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 16
    Points : 14
    Points
    14
    Par défaut Caractères interdit
    Bonjour, je suis débutant en Java et j'ai créé mon premier petit programme.
    C'est un jeu du "bon nombre", soit : trouver le bon nombre généré random

    Cependant, je voudrais que si l'utilisateur répond une lettre ou un autre caractère qu'une chiffre, la boucle de demande continue.
    La vérification de cette condition se fait avec la variable "verifreponse".
    Pour être plus clair, voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    import java.util.Random;
    import java.util.Scanner;
     
     
    public class goodnumber {
     
    	public static void main(String[] args) {
    		System.out.println("Le jeu du bon nombre ! BingoNombre !\n");
    		Random r = new Random();
    		int valeur = 0 + r.nextInt(20 - 0); //Compris entre 0 et 20
    		int reponse=0;
    		String verifreponse;//Caracteres interdits (tous les caracteres autre que chiffres)
    		Scanner sc = new Scanner(System.in);
    		Scanner sc2 = new Scanner(System.in);
    		if(valeur>20)
    		{
    			System.out.println("Oula ! Erreur de creation du nombre random !");
    		}else{
    			System.out.println("Nombre genere !\n");
    			while(reponse != valeur)
    			{
    				System.out.println("Entrez le nombre !\n");
    				reponse=sc.nextInt();
    				if (reponse>valeur)
    				{
    					System.out.println("Le random est plus petit !");
    				}else if(reponse==valeur){
    				}else if (reponse!=verifreponse){ // on verifie la reponse s elle n est pas une lettre 
    					System.out.println("Merci d'entrer un nombre correct !");
    				}
    				else{
    					System.out.println("Le random est plus grand !");
    				}
    			}
    			System.out.println("\nFelicitation ! Le nombre random est bien : "+valeur+" !");
    			System.out.println("\nSouhaitez vous recommencer ?");
    			String recommencer=sc2.nextLine();
    			if (recommencer.equals("oui")||recommencer.equals("o")) // string.equals() permet de mettre sous condition un String
    			{
    				System.out.println("Recommencons !");
    			}else if (recommencer.equals("non")||recommencer.equals("n"))
    			{
    				System.out.println("Merci d'avoir joue avec nous !");
    			}else{
    				System.out.println("Veuillez entrer une valeur correct !");
    			}
    		}
    	}
     
    }
    Merci d'avance !!

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Scanner.hasNextInt() permet de savoir que ce qui a été saisi est un entier : si ça n'est pas le cas, tu lis ce qui a été lu par un nextLine(), tu affiches le message que tu veux, et tu boucles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while( !scanner.hasNextInt() ) {
        scanner.nextLine();
        System.out.println("Saisir un nombre svp");
    }
    int nombre = scanner.nextInt();
    Attention, ne pas utiliser plusieurs Scanner sur System.in : le stream est bufferisé, donc il peut commencer à lire des caractères en avance de ce que tu récupères par nextInt, ce qu'il fait que l'autre va ne pas avoir accès à ces caractères, et donc tu vas avoir des dysfonctionnements.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 16
    Points : 14
    Points
    14
    Par défaut Re
    Merci de ta réponse !

    Cependant, mon code bug :l
    Je ne comprends pas comment placer hasNextInt();

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    import java.util.Random;
    import java.util.Scanner;
     
     
    public class goodnumber {
     
    	public static void main(String[] args) {
    		System.out.println("Le jeu du bon nombre ! BingoNombre !\n");
    		Random r = new Random();
    		int valeur = 0 + r.nextInt(20 - 0); //Compris entre 0 et 20
    		int reponse=0;
    		Scanner sc = new Scanner(System.in);
    		Scanner sc2 = new Scanner(System.in);
    		if(valeur>20)
    		{
    			System.out.println("Oula ! Erreur de creation du nombre random !");
    		}else{
    			System.out.println("Nombre genere !\n");
    			while(reponse != valeur)
    			{
    				while(sc.hasNextInt()){
    				System.out.println("Entrez le nombre !\n");
    				reponse=sc.nextInt();
    				if (reponse>valeur)
    				{
    					System.out.println("Le random est plus petit !");
    				}else if(reponse==valeur){
    				}else{
    					System.out.println("Le random est plus grand !");
    				}
    				}
    				System.out.println("Veuillez entrer un nombre ou un chiffre !");
    			}
    			sc.close();
    			System.out.println("\nFelicitation ! Le nombre random est bien : "+valeur+" !");
    			System.out.println("\nSouhaitez vous recommencer ?");
    			String recommencer=sc2.nextLine();
    			if (recommencer.equals("oui")||recommencer.equals("o")) // string.equals() permet de mettre sous condition un String
    			{
    				System.out.println("Recommencons !");
    				sc2.close();
    			}else if (recommencer.equals("non")||recommencer.equals("n"))
    			{
    				System.out.println("Merci d'avoir joue avec nous !");
    				sc2.close();
    			}else{
    				System.out.println("Veuillez entrer une valeur correct ! Le jeu est termine.");
    			}
    		}
    	}
     
    }
    Merci ^^

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    N'utilise pas while(sc.hasNextInt()){ je teste le nombre } qui dit tant qu'on a des entiers dans le flux, alors je teste ce qui a été saisi.

    Dans ton code initial :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.out.println("Entrez le nombre !\n");
    reponse=sc.nextInt();
    Tu ajoutes la boucle que je t'ai indiquée entre les 2 lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    System.out.println("Entrez le nombre !\n");
    while( !scanner.hasNextInt() ) {
        scanner.nextLine();
        System.out.println("Saisir un nombre svp");
    }
    reponse=sc.nextInt();
    Qui veut dire :
    • j'affiche une invite pour saisir un nombre
    • tant que ce qui est saisi n'est pas un nombre
      • je lis ce qui a été saisi (que je ne veux pas)
      • je dis que ce qui a été saisi n'est pas bin
      • je boucle
    • si ce qui a été saisi est bien ce que je veux (un nombre)
    • je lis ce qui a été saisi, et je le traite...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 16
    Points : 14
    Points
    14
    Par défaut Re
    Merci beaucoup pour ta réponse détaillée !
    Les débutants comme moi peuvent progresser rapidement grâce à ce genre de réponses, je te remercie encore.

    Cependant, il y a un bug que je n'arrive pas à élucider :o :

    Mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    import java.util.Random;
    import java.util.Scanner;
     
     
    public class goodnumber {
     
    	public static void main(String[] args) {
    		System.out.println("Le jeu du bon nombre ! BingoNombre !\n");
    		Random r = new Random();
    		int valeur = 0 + r.nextInt(20 - 0); //Compris entre 0 et 20
    		int reponse=0;
    		Scanner sc = new Scanner(System.in);
    		Scanner sc2 = new Scanner(System.in);
    		if(valeur>20)
    		{
    			System.out.println("Oula ! Erreur de creation du nombre random !");
    		}else{
    			System.out.println("Nombre genere !\n");
    			while(reponse != valeur)
    			{
    				System.out.println("Entrez le nombre !\n");
    				while( !sc.hasNextInt() ) { // verification du chiffre sil nest pas une lettre
    				    sc.nextLine();
    				    System.out.println("Saisissez un nombre s'il vous plait !");
    				}
    				reponse=sc.nextInt();
    				if (reponse>valeur)
    				{
    					System.out.println("Le random est plus petit !");
    				}else if(reponse==valeur){
    				}else{
    					System.out.println("Le random est plus grand !");
    				}
    			}
    			System.out.println("\nFelicitation ! Le nombre random est bien : "+valeur+" !");
    			System.out.println("\nSouhaitez vous recommencer ?");
    			String recommencer=sc2.nextLine();
    			if (recommencer.equals("oui")||recommencer.equals("o")) // string.equals() permet de mettre sous condition un String
    			{
    				System.out.println("Recommencons !");
    			}else if (recommencer.equals("non")||recommencer.equals("n"))
    			{
    				System.out.println("Merci d'avoir joue avec nous !");
    			}else{
    				System.out.println("Veuillez entrer une valeur correct ! Le jeu est termine.");
    			}
    		}
    	}
     
    }
    Le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Le jeu du bon nombre ! BingoNombre !
     
    Nombre genere !
     
    Entrez le nombre !
     
    d
    Saisissez un nombre s'il vous plait !
    6
    Le random est plus grand !
    Entrez le nombre !
     
    d
    Saisissez un nombre s'il vous plait !
    Saisissez un nombre s'il vous plait !
    6
    Le random est plus grand !
    Entrez le nombre !
     
    d
    Saisissez un nombre s'il vous plait !
    Saisissez un nombre s'il vous plait !
    6
    Le random est plus grand !
    Entrez le nombre !
     
    d
    Saisissez un nombre s'il vous plait !
    Saisissez un nombre s'il vous plait !
    Etrange d'avoir deux fois la même réponse ? u.o ? ( celle ci : -->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Saisissez un nombre s'il vous plait !
    Saisissez un nombre s'il vous plait !
    )

    Merci =) !

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ajoute un nextLine() avant de boucler (pour vider ce qu'il y a dans le buffer, car le nextInt() ne lit que le prochain nombre dans le buffer) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
          }else{
             System.out.println("Le random est plus grand !");
          }
          sc.nextLine();
       }
    ...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 16
    Points : 14
    Points
    14
    Par défaut Re
    Superbe ! ça fonctionne à la perfection !

    Merci beaucoup pour ton aide, bonne journée !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. caractères "interdits"
    Par mussara dans le forum Langage SQL
    Réponses: 5
    Dernier message: 01/12/2006, 21h00
  2. [perl] Caractères interdit pour la clé d'un hash ?
    Par LE NEINDRE dans le forum Langage
    Réponses: 2
    Dernier message: 24/02/2006, 08h57
  3. [XML] caractères interdits
    Par ep31 dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 02/12/2005, 20h05
  4. [Requête SQL] Caractère interdit
    Par Mister Nono dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 13/09/2005, 09h28
  5. [Requete SQL] Caractère interdit
    Par Mister Nono dans le forum SQL
    Réponses: 1
    Dernier message: 13/09/2005, 09h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo