私はString
として保存された数値(BigDecimal
として保存されている)と通貨(USDまたはCNY)を受け入れるプログラムを持っています。ユーザーdimo414の助けを借りて、私は空白入力と非数値入力を考慮することができました。また、有効な入力が読み取られるまで再試行することもできました。ここで特定のケースに対して `try`ブロックを繰り返す方法は?
はコードです:moneyInput
が有効であるとき
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): ");
Boolean invalidInput; // breaks out of do-while loop after successful outcome
do {
invalidInput = false;
try {
String line = input.nextLine();
Scanner lineScan = new Scanner(line);
BigDecimal moneyInput = lineScan.nextBigDecimal();
String currency = lineScan.next();
if (currency.equals("USD")) {
// convert USD to CNY
} else if (currency.equals("CNY")) {
// convert CNY to USD
} else {
/*
reprompt user for currency,
but retain the value of moneyInput;
repeat process until valid currency
*/
}
} catch (NoSuchElementException | IllegalStateException e) {
// deals with errors:
// non-numeric moneyInput or blank input
}
} while (invalidInput);
}
は今、私が扱う問題が発生したんだけど、currency
は、例えば、ではありません100.00 abc
。この場合、currency
の値を再入力し、money
の値を保持するようにユーザーに促したいと思います。
私は同様のDO-whileループcurrency
の入力を求めので、同様のif-elseブロックに継続セクションの周りに使用してみました:
do {
String currency = lineScan.next();
if (currency.equals("USD")) {
// convert USD to CNY
} else if (currency.equals("CNY")) {
// convert CNY to USD
} else {
invalidInput = true;
System.out.print("Please enter a valid currency: ");
// since invalidInput == true,
// jump back up to the top of the do block
// reprompt for currency
}
} while (invalidInput);
しかし、それは例外エラーが表示されてしまうため、この解決策は効果がなかったがメッセージは外側のcatch
ブロックから来ました。だから、実際にtry-catchブロック内のtry-catchブロック内にdo-whileループを実装する必要がありました。
私はelse
ブロックで呼び出すことができるreadCurrency
と呼ばれるmain
以外の新しい関数を定義しようとしましたが、変数スコープの問題が発生しました。私はまだJavaの初心者ですので、関数を適切に定義して必要な情報を渡す方法がわかりませんでした。
tryブロックの先頭にループバックして、ユーザにの通貨のみを再入力できるようにする他の方法はですか?
フィードバックをお寄せいただきありがとうございます。
はあなたが求めることはできません。それがお役に立てば幸い2つの段階での入力: - が//それが 各「ディール」を求めることができる別の方法になります入力を再入力して対処通貨を挿入 - 量 //量 に対処を挿入何かが必要なもの – SCouto
初めてユーザが '100.00 abc'を挿入した場合、プログラムからユーザに何を聞くのですか? –
@nickzoum 'catch'ブロックからのエラーメッセージが表示され、' else'ブロックに一時的に置かれた印刷メッセージが続きます。その後、ユーザは再入力することができる。ケース(http://imgur.com/a/Z2PRc)のスクリーンショットです。再入力のためには、プログラムは 'money'と' currency'の両方を続ける必要があることに注意してください。 –