La entrada debe escribirse dos veces y no se permite escribir cadenas cuando se pueden ingresar

Mi código

package morrisJCh5Sec2;

import java.util.Scanner;

public class Ch5Sec2 {
    public static int collectInteger(String purpose, int minimum, int maximum) {

        Scanner input = new Scanner(System.in);
        System.out.println(purpose);
        System.out.printf("\tEnter an integer between " + minimum + " and " + maximum + ": ");
        int value = input.nextInt();
        while(input.hasNext()) {

            if(!input.hasNextInt()) {
                System.out.println("The value you enter needs to be between " + minimum + " and " + maximum + ". Please try again.");
                System.out.printf("\tEnter an integer between " + minimum + " and " + maximum + ": ");
                value = input.nextInt();
                input.next();
                continue;
                //not an integer
            }//end not int if
            else {
                value = input.nextInt();
                if(value >= minimum && value <= maximum) {
                    return value;
                }
                else {
                    System.out.println("The value you enter needs to be between " + minimum + " and " + maximum + ". Please try again.");
                    System.out.printf("\tEnter an integer between " + minimum + " and " + maximum + ": ");
                    value = input.nextInt();
                }//end else out of bounds

            }
            //input.close();
        }

        return 0;
    }//end collectInteger
    public static void main(String args[]) {
        final int LOW_INT = 0;
        final int HIGH_INT = 100;
        int inputValue = collectInteger("Enter the number of cats.", LOW_INT, HIGH_INT);
        System.out.printf("Your number of cats was %d.\n", inputValue);
    }//end main
}//end class

Mi salida:

Enter the number of cats.
    Enter an integer between 0 and 100: -56
-56
The value you enter needs to be between 0 and 100. Please try again.
    Enter an integer between 0 and 100: 101
101
The value you enter needs to be between 0 and 100. Please try again.
    Enter an integer between 0 and 100: jads
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.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at morrisJCh5Sec2.Ch5Sec2.collectInteger(Ch5Sec2.java:30)
    at morrisJCh5Sec2.Ch5Sec2.main(Ch5Sec2.java:42) 

Mi salida debe permitir que se ingrese una cadena y nuevamente solicitará un número entero. Otro problema es que no se supone que mi código haga que el usuario escriba su entrada dos veces, solo debe tomar la entrada del usuario una vez y ejecutar el código.

Respuesta 1

Estoy tratando de crear la estructura de datos de un HashMap () en Java. El HashMap tiene que funcionar para un máximo de N = 1000 operaciones y las claves son solo enteros positivos. Lo que hice es lo siguiente: ...

Estoy ejecutando 4 instancias de aplicaciones basadas en Spring Boot Integration en 4 servidores diferentes. El proceso es: Leer archivos XML uno por uno en una carpeta compartida. Procesar el archivo (verificar estructura, contenido ...), ...

Estoy tratando de clonar una lista en una nueva lista y establecer una propiedad en la nueva lista. Estoy tratando de usar Java8 Stream, ya que simplifica la clonación. Mi código funciona pero le da olor a este código de Sonar: Local ...

Acceda a archivos PDF desde 'res / raw' o carpeta de activos mediante programación para analizar con los métodos dados Explicación: En este momento, este programa accede a un archivo desde un administrador de archivos que toma los archivos seleccionados ...