我在让程序响应空输入方面遇到了困难。例如,假设我想提示用户输入一个类型为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
如何让程序在用户输入数字并按下[回车]后提示用户输入货币类型,例如请输入货币类型:
?类似于:
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]键来为每个提示输入内容,直到最终输入可读内容为止)。感谢阅读,对于这篇长篇大论的文章表示抱歉。
line.split("\\s+")
方法来实现相同的结果呢?我对这个方法不太熟悉,所以在语法上遇到了些困难。谢谢。 - A is for Ambitioncurrency
是否有效?我希望它能像moneyInput
一样运作,即如果输入类似于100.00 abc
或100.00
之类的内容,则用户将被要求重复输入currency
,一旦他们输入了有效的货币类型,例如USD
,程序就会正常恢复。我尝试在内部使用另一个do-while循环来检查货币类型,这个方法可以工作,但是当输入为空时,它就会出现问题,这基本上是我在本文开头遇到的同样的问题(这是我的代码:http://pastebin.com/raw/CT0qjBPk和程序截图:http://imgur.com/a/mjfaL)。 - A is for Ambitiontry
块,全部位于while
循环内(基本上是镜像您的第一个解决方案)。一切都正常工作,包括能够响应重新提示currency
时的空输入,但我遇到了一些新问题(请参见:http://pastebin.com/kEUQSEFF和http://imgur.com/a/W6WWB)。我正在不断地解决这个问题,所以如果我修复了其中一些错误,我一定会更新。非常感谢您的帮助。 - A is for Ambition