数値 (int) を待機する非常に単純なループがあり、その数値でない限りexitOption
ループを離れませんが、予期しないエラーが発生し、何が原因かわかりません。
編集
コンパイルできるように別のスニペットを追加する
public static void main(String[] args) throws FileNotFoundException,
SecurityException,
IOException,
ClassNotFoundException {
while (controller.selectOptionMM());
/編集
public boolean selectOptionMM() throws SecurityException,
FileNotFoundException,
IOException {
int cmd = ui.getExitOption();
ui.mainMenu();
cmd = utils.readInteger(">>> "); // this is my problem, right here
// code in next snippet
while (cmd <1 || cmd > ui.getExitOption()) {
System.out.println("Invalid command!");
cmd = utils.readInteger(">>> ");
}
switch (cmd) {
case 1:
case 2:
case 3:
case 4: this.repository.close();
return true;
case 5: return false;
}
return false;
}
失敗するものは次のとおりです。
public int readInteger(String cmdPrompt) {
int cmd = 0;
Scanner input = new Scanner(System.in);
System.out.printf(cmdPrompt);
try {
if (input.hasNextInt())
cmd = input.nextInt(); // first time it works
// Second time it does not allow me to input anything
// catches InputMissmatchException, does not print message
// for said catch
// infinitely prints "Invalid command" from previous snippet
} catch (InputMismatchException ime) {
System.out.println("InputMismatchException: " + ime);
} catch (NoSuchElementException nsee) {
System.out.println("NoSuchElementException: " + nsee);
} catch (IllegalStateException ise) {
} finally {
input.close(); // not sure if I should test with if (input != null) THEN close
}
return cmd;
}
初めてトラフを通過すると、問題なく番号が読み取られます。番号が 5 でない場合 (この場合は exitOption)、再びトラフを通過しますが、readInteger(String cmdPrompt)
今回はcatch (InputMismatchException ime)
(デバッグ) にジャンプしますが、そのメッセージは出力せず、 と にジャンプするだけError, input must be number
ですInvalid command
。
入力バッファに何か詰まっていますか?フラッシュできますか?(入力バッファ)が(ランダムデータで)詰まっているのはなぜですか???
再度デバッグを試みて、入力バッファにスタックしているものを確認します。それを確認する方法がわかれば。