0
votes

Continuez à demander une entrée utilisateur jusqu'à ce qu'un entier soit compris entre deux chiffres

J'ai besoin d'aide avec le code suivant:

    int seatNum = 0;

    Scanner seatNumber = new Scanner(System.in);

    do
    {
        try 
        {
            System.out.println("Please choose a seat number");
            seatNum = seatNumber.nextInt();  
        } 
        catch(InputMismatchException e) 
        {
            System.out.println("The index you have entered is invalid");
            System.out.println("Please enter an index number between 0 and 7");

        }

    } while (seatNum <= 0 || seatNum >= 7);


0 commentaires

4 Réponses :


1
votes
    int seatNum = 0;
    Scanner seatNumber = new Scanner(System.in);
    do {
        try {
            System.out.println("Please choose a seat number");
            seatNum = seatNumber.nextInt();
        }
        catch(InputMismatchException e) {
            System.out.println("The index you have entered is invalid");
            System.out.println("Please enter an index number between 0 and 7");
            seatNumber.nextLine();
        }
    } while ( (seatNum <= 0 || seatNum >= 7) );
add seatNumber.nextLine(); in the catch block. This command advances the scanner to the next line (when reading from a file or string, this simply reads the next line), thus essentially flushing it, in this case. It clears the buffer and readies the scanner for a new input.

1 commentaires

Idéalement, vous devez également ajouter une sorte de message de défaillance de validation dans le numéro de cas ne figure pas dans la plage.



0
votes

Essayez ceci

String seatNum = null;
Scanner scanner = new Scanner(System.in);
while(true){
System.out.println(" Enter a number between 0 and 7"); 
seatNum = scanner.nextLine().toString();
if(seatNum.matches("[0-7]")) break; // makes sure user enter a number also between the range
else System.out.println("Enter between 0 and 7");


3 commentaires

C'est encore mieux. Je devais juste le convertir en un entier après cela, car il passe par un tableau plus tard dans le programme. Merci


@Softy Oui, vous devez l'analyser à INT, je ne sais pas si vous avez compris les matchs ("[0-7") ou non, cela s'appelle une expression régulière, regex est plutôt pratique que vous devriez les avoir dans votre boîte à outils


@Softy je peux la rendre encore plus courte et meilleure



0
votes

Vous pouvez le changer comme ceci:

        int seatNum = 0;
        Scanner seatNumber = new Scanner(System.in);
        do
        {
            try
            {
                System.out.println("Please choose a seat number");
                try{
                    seatNum = Integer.parseInt(seatNumber.next());
                }catch (Exception ignored){}
            }
            catch(InputMismatchException e)
            {
                System.out.println("The index you have entered is invalid");
                System.out.println("Please enter an index number between 0 and 7");

            }

        } while (seatNum <= 0 || seatNum >= 7);


0 commentaires

2
votes

Soit vous pouvez utiliser BufferDreader ou utiliser un scanner avec un siège supplémentaire.Number () avec une explication ci-dessus donnée par @ Lazy.coder xxx


0 commentaires