Как мне разрешить моей программе выполнять что-либо в зависимости от типа пользовательского ввода?

#java

#java

Вопрос:

Я создал калькулятор «автомобильных финансов» на Java, однако я хочу убедиться, что охвачен не только счастливый путь. Когда пользователь вводит строку, программа завершает работу, поскольку ожидает целое число. Затем я подумал, что, если я задам входные данные в виде строки, а затем преобразоваю их в целое число, но я хочу, чтобы это преобразование происходило только в том случае, если входные данные распознаются как целое число… если это имеет смысл.

 if(a.equalsIgnoreCase("Blue Car")) {
        System.out.println("This car is £9,000");
        Scanner input = new Scanner(System.in);
        System.out.println("Please type in your deposit amount."); 

        String value = "";
        int intValue;
        value = input.nextLine(); 
        try {
        intValue = Integer.valueOf(value);
        } catch (NumberFormatException e) {
        System.out.println("Please print only numbers!");
        }           


        if(value < 9000) {
        System.out.println("The price of the car after your deposit is: "   (9000 - intValue)); 

        System.out.println("Please confirm the left over price after your deposit by typing it in.");
        int value1 = 0;
        value1 = input.nextInt();
        System.out.println("How long would you like the finance to be?"); 
        System.out.println("12 Months, 24 Months, 36 Months, 48 Months");
        System.out.println("Please type either 12, 24, 36 etc"); 
        int value2 = 0;
        value2 = input.nextInt();
        System.out.println("You will be paying "   value1 / value2   " pounds a month!"); }
        else if(value.equalsIgnoreCase ("")){
            System.out.println("Please only enter numbers.");
        }

        else {
            System.out.println("Great - you can pay the car in full!");
            chooseOption = true; 
        }
  

Я пытался использовать parseInt, однако я хочу, чтобы parseInt выполнялся только в том случае, если введено число.

Я хочу, чтобы моя программа могла распознавать, является ли пользовательский ввод целым числом, затем выполнить оператор if / else, который выполняет вычисления с этим целым числом, и если ввод НЕ является целым числом, то я хочу, чтобы появилось сообщение «Пожалуйста, убедитесь, что вы вводите числа».

Обновить

Я добавил метод, который кто-то предложил в комментариях, но я не уверен, как совместить его с имеющимся у меня кодом, поскольку он по-прежнему сообщает мне, что значение не является целым числом, и поэтому я не могу использовать ‘<‘ .

Комментарии:

1. Вы делаете if(value < 9000) , но value это ваша строка, intValue это ваше целое число. Пожалуйста, постарайтесь не изменять свой вопрос с помощью правок. Правки предназначены для уточнения вашего первоначального вопроса, а не для того, чтобы задавать последующие вопросы. Если у вас возник новый вопрос, задайте новый вопрос. Вы можете сослаться на это для контекста.

2. Извините, не беспокойтесь. Спасибо.

Ответ №1:

Из документов java.lang.Integer :

Выдает:
Исключение NumberFormatException — если строка не содержит анализируемого целого числа.

Итак, просто перехватите это исключение, и вы узнаете, что строка не содержала анализируемого целого числа.

 int resu<
try {
    result = Integer.parseInt(value);
}
catch (NumberFormatException e) {
    // value was not valid, handle here
}
  

Ответ №2:

Добро пожаловать в Stack Overflow.

Вы на правильном пути, но вам нужно понимать исключения — когда parseInt пытается проанализировать значение, которое не является целым числом, оно выдает исключение. В Java мы можем перехватывать исключения и обрабатывать их (вместо того, чтобы позволять им прерывать выполнение программы).

В вашем случае это выглядит так:

 try {
  int result = Integer.parseInt(value);           
  //Do your normal stuff as result is valid
}
catch (NumberFormatException e)
{
   // Show your message "Please only enter numbers"  
}
//Code continues from here in either case
  

Ответ №3:

Вы могли бы использовать StringUtils.IsNumeric, если хотите добавить стороннюю библиотеку.

Если ваш вариант использования достаточно прост, я бы, вероятно, поступил следующим образом:

 int intValue;
String value = "";
value = input.nextLine(); 
try {
    intValue = Integer.valueOf(value);
} catch (NumberFormatException e) {
    System.out.println("Please print only numbers!");
}
  

Комментарии:

1. Просто небольшое примечание: StringUtils.isNumeric возвращает true также для строк, которые не поддаются синтаксическому анализу с помощью Integer.parseInt , если значение выходит за пределы диапазона для 32-разрядного целого числа.

2. Полезно знать. Действительно, есть варианты получше, чем Integer.parseInt, в зависимости от возможных диапазонов для входного числа (например,Long.parseLong).

3. Привет, я обновил свои вопросы и включил этот метод, но также добавил немного больше своего кода, поскольку я не уверен, как вписать этот метод в мои инструкции if / else и чтобы он работал с ними.

4. Long.parseLong все равно может произойти сбой, если значение выходит за пределы диапазона для 64-разрядной версии, поэтому вам все равно нужно перехватить NumberFormatException . Но комбинация StringUtils.isNumeric и перехвата NumberFormatException может помочь создавать лучшие сообщения об ошибках для пользователя-человека, например, различать входное значение, которое является целым числом вне диапазона («Пожалуйста, введите число между x и y»), и то, которое вообще не является целым числом («Пожалуйста, введите число»).).