Come eseguire il looping dell’input dell’utente fino a quando non viene immesso un numero intero?

Sono nuovo di Java e volevo continuare a chiedere l’input dell’utente fino a quando l’utente non immette un numero intero, in modo che non ci sia InputMismatchException. Ho provato questo codice, ma ottengo comunque l’eccezione quando inserisco un valore non intero.

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(); } 

Grazie per il tuo tempo!

Prendi l’input usando next invece di nextInt . Metti un try catch per analizzare l’input usando il metodo parseInt. Se l’analisi ha esito positivo, interrompere il ciclo while, altrimenti continuare. Prova questo:

  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"); } } 

Soluzione più breve Prendi l’input in 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(); } 

Lavorando sul codice di Juned, sono riuscito a renderlo più breve.

 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); } } } 

In alternativa, se è solo un numero intero a cifra intera [0-9], puoi controllare il suo codice ASCII. Dovrebbe essere tra 48-57 per essere un numero intero.

Costruendo sul codice di Juned, puoi sostituire il blocco try con una condizione 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"); }