¿Cómo hacer un bucle de entrada de usuario hasta que se ingresa un número entero?

Soy nuevo en Java y quería seguir pidiendo la entrada del usuario hasta que el usuario ingrese un número entero, de modo que no haya InputMismatchException. He intentado con este código, pero sigo recibiendo la excepción cuando ingreso un valor no entero.

int getInt(String prompt){ System.out.print(prompt); Scanner sc = new Scanner(System.in); while(!sc.hasNextInt()){ System.out.println("Enter a whole number."); sc.nextInt(); } return sc.nextInt(); } 

¡Gracias por tu tiempo!

Tome la entrada usando next lugar de nextInt . Ponga un try catch para analizar la entrada usando el método parseInt. Si el análisis es exitoso, corte el ciclo while; de ​​lo contrario, continúe. Prueba esto:

  System.out.print("input"); Scanner sc = new Scanner(System.in); while (true) { System.out.println("Enter a whole number."); String input = sc.next(); int intInputValue = 0; try { intInputValue = Integer.parseInt(input); System.out.println("Correct input, exit"); break; } catch (NumberFormatException ne) { System.out.println("Input is not a number, continue"); } } 

Solución más corta. Solo toma la entrada en sc.next ()

  public int getInt(String prompt) { Scanner sc = new Scanner(System.in); System.out.print(prompt); while (!sc.hasNextInt()) { System.out.println("Enter a whole number"); sc.next(); } return sc.nextInt(); } 

Trabajando con el código de Juned, pude hacerlo más corto.

 int getInt(String prompt) { System.out.print(prompt); while(true){ try { return Integer.parseInt(new Scanner(System.in).next()); } catch(NumberFormatException ne) { System.out.print("That's not a whole number.\n"+prompt); } } } 

Como alternativa, si solo tiene un entero de un dígito [0-9], entonces puede verificar su código ASCII. Debería estar entre 48-57 para ser un número entero.

Construyendo sobre el código de Juned, puedes reemplazar try block con una condición if:

  System.out.print("input"); Scanner sc = new Scanner(System.in); while (true) { System.out.println("Enter a whole number."); String input = sc.next(); int intInputValue = 0; if(input.charAt(0) >= 48 && input.charAt(0) <= 57){ System.out.println("Correct input, exit"); break; } System.out.println("Input is not a number, continue"); }