我有一个非常简单的循环,它等待一个数字(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)
(debug),除非它不打印该消息而只是跳转到Error, input must be number
and Invalid command
。
有什么东西卡在我的输入缓冲区中,我可以刷新它吗,为什么它(输入缓冲区)卡住了(带有随机数据)???
如果我能弄清楚如何查看它,我将再次尝试调试并查看我的输入缓冲区中卡住了什么。