2015-07-30 5 views
2

Мне было интересно, как вы можете выполнять проверку типов для ввода пользователем. Здесь у меня есть простой тест, чтобы проверить, находится ли пользовательский ввод между 1 и 10. Я хочу настроить его так, чтобы пользователь мог также ввести букву, в первую очередь, поэтому я могу использовать вход «q» для выхода из программы.Как проверить тип ввода пользователя в Java?

Есть ли часть сканера, которая может набрать чек? Моя мысль заключалась в том, чтобы иметь оператор if: если пользователь вводит тип int continue, если он не является типом int, проверьте, есть ли q для выхода из программы, иначе вывод это ошибка. Ниже приведено то, что у меня есть до сих пор, оно выдает выражение, когда число вводится, поскольку типы не совпадают.

public static void main(String[] args) { 
    //Create new scanner named Input 
    Scanner Input = new Scanner(System.in); 
    //Initialize Number as 0 to reset while loop 
    int Number = 0; 

    do 
    { 
     //Ask user to input a number between 1 and 10 
     System.out.println("At anytime please press 'q' to quit the program."); 
     System.out.println(); 
     System.out.print("Please enter a number between 1 and 10:"); 
     Number = Input.nextInt(); 

     if (Number == 'Q'|| Number == 'q') 
     { 
      System.out.println("You are now exiting the program"); 
     } 
     else if (Number >= 1 && Number <= 10) 
     { 
      System.out.println("Your number is between 1 and 10"); 
     } 
     else 
     { 
      System.out.println("Error: The number you have entered is not between" 
        + " 1 and 10, try again"); 
     } 
    } 
    //Continue the loop while Number is not equal to Q 
    while (Number != 'Q' & Number != 'q'); 
} 

} 

Спасибо всем за ответы. Я немного новичок, поэтому инструкция try для меня нова, но похоже, что она будет работать (кажется, что она сама объясняет, что она делает). Я буду изучать его использование и внедрять его правильно.

+2

возможный дубликат [Как проверить, если Строка является числовым типом в Java] (http://stackoverflow.com/questions/1102891/how-to-check-if-a-string-is-a-num eric-type-in-java) –

+1

Я думаю, что это может быть то, что вы ищете http://stackoverflow.com/questions/5333110/checking-input-type-how –

ответ

0

Имейте свой ввод в качестве строки, чтобы проверить ввод Q/q. Затем после этого вы можете parseInt от строки ввода до целого числа следующим образом, поймав потенциальные значения NumberFormatExceptions.

String input = "5" 
try { 
int number = Integer.parseInt(input); 
} catch (NumberFormatException e) { 
System.out.println("Not a number!") 
} 

Или что-то похожее на это.

2

Я хотел бы использовать nextLine() и parseInt(), чтобы увидеть, если это int:

int Number; 
    String test = ""; 
    boolean isNumber = false; 
    ...... 

    test = Input.nextLine(); 
    try 
    { 
     Number = Integer.parseInt(test); 
     isNumber = true; 
    } 
    catch(NumberFormatException e) 
    { 
     isNumber = false; 
    } 
    if(isNumber) 
    { 
     if (Number >= 1 && Number <= 10) 
     { 
      System.out.println("Your number is between 1 and 10"); 
     } 
     else 
     { 
      System.out.println("Error: The number you have entered is not between" 
       + " 1 and 10, try again"); 
     } 
    } 
    else 
    { 
     if (test.equalsIgnoreCase("q")) 
     { 
      System.out.println("You are now exiting the program"); 
     } 
    } 

......... 
while (!test.equalsIgnoreCase("q")); 
+0

Имеет ли инструкция catch всегда e? Это единственное, что я немного размыт. Я понимаю все остальное, но e немного отбрасывает меня, это просто часть синтаксиса? – user121582

+1

'e' может быть что угодно ... это может быть' catch (NumberFormatException ex) 'это может быть' catch (исключение NumberFormatException) 'это может быть' catch (NumberFormatException anything) '. Это просто переменная, которую вы переходите в блок 'catch'. Внутри блока 'catch' он будет содержать информацию, относящуюся к вызываемому исключению, например,' StackTrace'. – brso05

+0

Чтобы прояснить вышеприведенный комментарий, «e» - это имя переменной для этого экземпляра исключения. Затем вы можете сделать материал с экземпляром исключения (например, e.getStackTrace). Это имя несущественно для вашей цели. – Iridann

-1

Вы можете получить вход в виде строки, а затем использовать регулярные выражения соответствия на указанной строке.

String txt = Input.nextLine(); 
if(txt.matches("[0-9]+") // We have a number 
{ 
    // Safe to parse to number 
} 
else if(txt.matches("[A-Za-z]+") // We have alphabeticals 
{ 
    // Check for various characters and act accordingly (here 'q') 
} 
+0

В этом случае нет необходимости использовать регулярные выражения, что усложняет решение. – Iridann

+0

Я собираюсь с вами не согласиться.Я не думаю, что он добавляет много сложности вообще, более универсален и не полагается на обработку исключений для потока программы. – Harry

0

Вы можете проверить если это int так:

String inputArg = Input.next(); 

private boolean isInt(String inputArg){ 
    boolean isInt = true; 
    try { 
     Integer.parseInt(inputArg); 
    } catch(NumberFormatException e) { 
     isInt = false; 
    } 
    return isInt; 
} 

Другой способ использует regular expressions

1

попробовать этот

Scanner Input = new Scanner(System.in); 
    //Initialize Number as 0 to reset while loop 
    String Number = "0"; 

    do { 
     try { 
      //Ask user to input a number between 1 and 10 
      System.out.println("At anytime please press 'q' to quit the program."); 
      System.out.println(); 
      System.out.print("Please enter a number between 1 and 10:"); 
      Number = Input.next(); 

      if (Number.equalsIgnoreCase("q")) { 
       System.out.println("You are now exiting the program"); 
      } else if (Integer.valueOf(Number) >= 1 && Integer.valueOf(Number) <= 10) { 
       System.out.println("Your number is " + Number); 
      } else { 
       System.out.println("Error: The (" + Number + ") is not between 1 and 10, try again"); 
      } 
     } catch (NumberFormatException ne) { 
      System.out.println("Error: The (" + Number + ") is not between 1 and 10, try again"); 
     } catch (Exception e) { 
      System.out.println(e.getMessage()); 
     } 
    } //Continue the loop while Number is not equal to Q 
    while (!Number.equalsIgnoreCase("q")); 
Смежные вопросы