2015-10-14 3 views
0

У меня есть простая программа, которая вычисляет ставку оплаты. Я знаю, что нужно использовать простую инструкцию while, но не знаю, как я мог бы ее наилучшим образом реализовать. В принципе, я могу неоднократно запрашивать ставку оплаты до тех пор, пока не будет получено целое число.Как проверить, является ли ввод целочисленным и повторяется до получения правильного ввода

Например, если пользователь вводит «cat», система должна отображать предупреждающее сообщение и продолжать печатать это сообщение до тех пор, пока не будет получено целое число.

Что у меня есть:

System.out.println("Please enter your hourly pay rate"); 
    if(user_input.hasNextInt()){ 
     payment = user_input.nextInt(); 
     System.out.println("Your hourly pay rate is " + payment + " dollars p/h"); 
    } 
    else{ 
     System.out.println("Please enter a valid input"); 
    } 
+1

Почему 'while (! User_input.hasNextInt())' неприемлем? –

ответ

0

Используйте делать-то время цикла с бесконечным циклом. После того как вы найдете значение int, перерыв цикла. Используйте try-catch для обработки исключений для других входов.

do { 
     System.out.println("Please enter your hourly pay rate"); 
     String str = user_input.nextLine(); 
     try { 
     payment = Integer.parseInt(str.trim()); 
     if (payment <= 0) { 
      System.out.println("Please enter a valid input"); 
      continue; 
     } 
     System.out.println("Your hourly pay rate is " + payment + " dollars p/h"); 
     break; 
     } 
     catch (NumberFormatException e) { 
     System.out.println("Please enter a valid input"); 
     } 
    } while (true); 

Выход:

Please enter your hourly pay rate 
string 
Please enter a valid input 
Please enter your hourly pay rate 
123 
Your hourly pay rate is 123 dollars p/h 

Online Demo

+0

Я пробовал это, но он перешел в бесконечный цикл – Saravana

+0

Я так не думаю. Можете ли вы предоставить, как вы его запускали. – YoungHobbit

+0

Работал для меня, задавался вопросом, будет ли это работать для отрицательного целого числа или 0? – shellpottassium

0

Как @Luke Парк упомянул вас просто может

while(!user_input.hasNextInt()){ 
    System.out.println("Please enter a valid input"); 
} 
payment = user_input.nextInt(); 
System.out.println("Your hourly pay rate is " + payment + " dollars p/h"); 
+0

Вы проверили это? Для любого неправильного ввода он переходит в бесконечный цикл. – YoungHobbit

+0

Да, он отправился в бесконечный цикл на этом ... – shellpottassium

0

Я сделал это

boolean gotIn = false; 
    while (!gotIn) { 
     try { 
      System.out.print("Enter number "); 
      Scanner scan = new Scanner(System.in); 
      System.out.println(scan.nextInt()); 
      scan.close(); 
      gotIn = true; 
     } catch (RuntimeException nfe) { 
      System.err.println("Invalid input, Enter only numbers "); 
     } 
    } 

но создание нового сканера каждый раз, @YoungHobbit решение является правильным.

Смежные вопросы