#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»), и то, которое вообще не является целым числом («Пожалуйста, введите число»).).