Erreur noSuchElement

Fermé
harlem49 - 24 juin 2015 à 11:02
 Utilisateur anonyme - 24 juin 2015 à 16:31
Bonjour,

Je suis actuellement un cours sur la programmation java et avant de continuer plus, j'essaye de réaliser différents exercices par moi même pour que l'utilisation des trucs de bases devienne plus "naturelle" pour moi.

J'ai réalisé un jeu du PlusouMoins ou l'utilisateur doit deviner un nombre avec le programme qui précise à chaque coup si le nombre à trouver est plus grand ou plus petit que le nombre entré.

Ce programme fonctionnait bien et j'ai voulu ajouter une fonctionnalité de difficulté par le biais d'une méthode et j'obtiens maintenant une erreur Nosuchelement qui me turlupine, je n'arrive pas a trouver pourquoi.

Voilà mon code :
import java.util.InputMismatchException;
import java.util.Random;
import java.util.Scanner;

public class PlusOuMoins {

public static void Jeu(){

System.out.println("==========> Bienvenue dans le jeu du plus ou moins !<==========");
int continuer = 0;

Scanner sc = new Scanner(System.in);

do{
int nombreAleatoire, nombreMystere = 0, compteur = 0, difficulte=3;

difficulte = ChoixDifficulte();
nombreAleatoire = NombreAleatoire(difficulte);

while (nombreMystere != nombreAleatoire){
System.out.println("\nQuel est le nombre mystère ?");
boolean v = false;

do{
try {
nombreMystere = sc.nextInt();
v = true;
}
catch (InputMismatchException e) {
System.out.println("La valeur saisie n'est pas un entier ou est trop grande");
sc.nextLine();
}
}
while (!v);


compteur++;

if (nombreMystere<nombreAleatoire)
System.out.println("\nLe nombre mystère est plus grand que " + nombreMystere + " !");
else if (nombreMystere>nombreAleatoire)
System.out.println("\nLe nombre mystère est plus petit que " + nombreMystere + " !");
else{
System.out.println("Bravo vous avez trouvé le nombre mystère, c'était " + nombreMystere + " !");
System.out.println("Vous avez utilisé " + compteur + " coups.");
System.out.println("Voulez vous rejouer une petite fois ?\n 1 - Oui \n N'importe quel chiffre pour Non");
v = false;
do{
try{
continuer=sc.nextInt();
v = true;
}
catch (InputMismatchException e){
System.out.println("Merci de saisir un chiffre.");
sc.nextLine();
}
}
while(!v);
}
sc.nextLine();


}}
while (continuer==1);
sc.close();


}

private static int NombreAleatoire (int difficulte){
int max = 0;

if (difficulte == 1)
max = 10;
else if (difficulte == 2)
max = 100;
else if (difficulte == 3)
max = 1000;
else if (difficulte == 4)
max = 10000;
else if (difficulte == 5)
max = 100000;

Random rand = new Random();
int nombreAleatoire = rand.nextInt(max) + 1;

return nombreAleatoire;
}
private static int ChoixDifficulte (){
int difficulte=0;
boolean w = false;
System.out.println("\nChoisissez votre difficulté !\n1 - Facile (entre 1 et 10)\n2 - Moyen (entre 1 et 100)\n3 - Difficile (entre 1 et 1000)");
System.out.println("4 - Très Difficile (entre 1 et 10 000)\n5 - Diabolique (entre 1 et 100 000");
Scanner scan = new Scanner(System.in);

do{
try{
difficulte = scan.nextInt();
w = true;
}
catch(InputMismatchException e){
System.out.println("Merci de rentrer un entier entre 1 et 5 !");
scan.nextLine();
}
}
while(!w || difficulte>5 || difficulte<1 );

scan.close();

return difficulte;
}
}




1 réponse

Utilisateur anonyme
Modifié le 4 mai 2023 à 10:37

Bonjour,

Ton problême est le suivant: en fermant le scanner du ChoixDifficulte, tu bousille ton autre scanner, lui aussi relié à System.in.

Faut mieux utiliser le même scanner:
 

import java.util.InputMismatchException;
import java.util.Random;
import java.util.Scanner;
 
public class PlusOuMoins {
     
 private static Scanner sc;
 
 public static void main(String[] args){
         
        System.out.println("==========> Bienvenue dans le jeu du plus ou moins !<==========");
        int continuer = 0;
         
        sc = new Scanner(System.in);
        
        do {
            int nombreAleatoire, nombreMystere = 0, compteur = 0, difficulte=3;
             
            difficulte = ChoixDifficulte();
            nombreAleatoire = NombreAleatoire(difficulte);
             
            while (nombreMystere != nombreAleatoire){
                System.out.println("\nQuel est le nombre mystère ?");
                boolean v = false;
 
                do{
                    try {
                        nombreMystere = sc.nextInt();
                        v = true;
                    } catch (InputMismatchException e) {
                            System.out.println("La valeur saisie n'est pas un entier ou est trop grande");
                            sc.nextLine();
                        }
                }
                while (!v);
 
                     
                compteur++;
             
                if (nombreMystere<nombreAleatoire)
                    System.out.println("\nLe nombre mystère est plus grand que " + nombreMystere + " !");
                else if (nombreMystere>nombreAleatoire)
                    System.out.println("\nLe nombre mystère est plus petit que " + nombreMystere + " !");
                else{
                    System.out.println("Bravo vous avez trouvé le nombre mystère, c'était " + nombreMystere + " !");
                    System.out.println("Vous avez utilisé " + compteur + " coups.");
                    System.out.println("Voulez vous rejouer une petite fois ?\n 1 - Oui \n N'importe quel chiffre pour Non");
                    v = false;
                    do{
                        try{
                            continuer=sc.nextInt();
                            v = true;
                        }
                        catch (InputMismatchException e){
                            System.out.println("Merci de saisir un chiffre.");
                            sc.nextLine();
                        }
                    }
                    while(!v);
                }
                sc.nextLine();
                 
 
            }}
            while (continuer==1);
         sc.close();
    }
     
    private static int NombreAleatoire (int difficulte){
        int max = 0;
         
        if (difficulte == 1)
            max = 10;
        else if (difficulte == 2)
            max = 100;
        else if (difficulte == 3)
            max = 1000;
        else if (difficulte == 4)
            max = 10000;
        else if (difficulte == 5)
            max = 100000;
         
        Random rand = new Random();
        int nombreAleatoire = rand.nextInt(max) + 1;
         
        return nombreAleatoire;
    }
    private static int ChoixDifficulte (){
        int difficulte=0;
        boolean w = false;
        System.out.println("\nChoisissez votre difficulté !\n1 - Facile (entre 1 et 10)\n2 - Moyen (entre 1 et 100)\n3 - Difficile (entre 1 et 1000)");
        System.out.println("4 - Très Difficile (entre 1 et 10 000)\n5 - Diabolique (entre 1 et 100 000");
             
        do{
            try{
                difficulte = sc.nextInt();
                w = true;
            }
            catch(InputMismatchException e){
                System.out.println("Merci de rentrer un entier entre 1 et 5 !");
                sc.nextLine();
            }
        }
        while(!w || difficulte>5 || difficulte<1 );         
        return difficulte;
    }
}
0