Как заставить сканер Java признать пустой ввод?
У меня проблемы с тем, чтобы моя программа реагировала на пустые данные. Например, скажем, я хотел предложить пользователю ввести значение для денег с типомBigDecimal
а также тип валюты. Вот как выглядит рассматриваемая программа.
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter the amount of money "
+ "and specify currency (USD or CNY): ");
// initialize variable moneyInput
BigDecimal moneyInput;
// check if moneyInput is numeric
try {
moneyInput = input.nextBigDecimal();
} catch (InputMismatchException e){
System.err.println("InputMismatchException: non-numeric value");
return;
}
// specify currency of moneyInput
String currencyType = input.next();
...
}
Итак, здесь, как вход100.00 USD
, работает отлично.
Enter the amount of money and specify currency (USD or CNY): 100.00 USD
$100.00 USD ≈ ¥670.17 CNY
Вход какASDF USD
соответственно приводит к сообщению об ошибке.
Enter the amount of money and specify currency (USD or CNY): ASDF USD
InputMismatchException: non-numeric value
Но как заставить программу реагировать на пустые вводы, немедленно нажав клавишу возврата или введя несколько пробелов в первой строке? Например:
Enter the amount of money and specify currency (USD or CNY):
1000.00 USD
$1000.00 USD ≈ ¥6701.70 CNY
В приведенном выше примере пользователь может просто нажимать клавишу возврата бесконечно, пока не будет введено что-либо читаемое (действительное или недействительное).Я хочу реализовать какой-то способ проверить, нажал ли пользователь клавишу возврата, не вводя ничего значащего.
Другой результат, который я не знаю, как учесть, - это если пользователь вводит ТОЛЬКО денежное значение, а затем нажимает [return] несколько раз, прежде чем, наконец, ввести валюту.
Пример:
Enter the amount of money and specify currency (USD or CNY): 100.00
USD
$100.00 USD ≈ ¥670.17 CNY
Как мне заставить программу подсказать пользователю что-то вродеPlease specify the currency:
после ввода числового значения и нажатия пользователем [return]? Что-то вроде
Enter the amount of money and specify currency (USD or CNY): 100.00
Please specify the currency: USD
$100.00 USD ≈ ¥670.17 CNY
Мне удалось достичь вышеуказанной функциональности, изменив деталь после блока try-catch на:
input.nextLine();
System.out.print("Please specify the currency: ");
String currencyType = input.nextLine();
Но используя этот метод, программа теряет возможность позволить пользователю вводить обаmoneyInput
а такжеcurrencyType
в одну строку, как в первом примере. (И снова, все еще существует проблема, заключающаяся в возможности бесконечно нажимать [return] для каждого из этих приглашений до тех пор, пока что-нибудь читаемое не будет наконец введено).
Спасибо за чтение и извините за длинный пост.