我试图编写一个从用户那里获取整数的程序,但如果用户输入"退出"也会结束该程序。当我运行程序时,它在我输入"退出"时起作用,但是当我开始输入一个整数时,我得到一个空行。如果我第二次输入整数,它就可以了。我已经尝试了几个针对类似问题的建议 - 包括try / catch,解析输入到Integer,以及触发空白Scanner#nextLine或Scanner#nextInt(以及在所有这些选项之间来回)。这是我最近一次尝试的例子。任何见解都将不胜感激。
int colInput;
System.out.println(", please pick a column in which to place your token (1-8).");
System.out.println("(Type 'quit' to exit the game or 'restart' to start over.)");
System.out.print("Column Choice: ");
Scanner selectCol = new Scanner (System.in);
try {
if (selectCol.next().equals("quit"))
Connect4.close();
}
finally {
colInput = selectCol.nextInt();
}
答案 0 :(得分:3)
String input = selectCol.next();
int colInput;
if (input.equals("quit"))
Connect4.close();
else
colInput = Integer.parseInt(input);
//Use colInput here or return colInput or whatever you wish to do with it
答案 1 :(得分:0)
在您提到的代码中,您正在使用"下一个令牌"扫描仪在行中找到
if (selectCol.next().equals("quit"))
收到令牌并与" quit"进行比较。无论令牌最初的价值是什么,它都会在之后丢失。然后在finally块中,您向扫描仪询问新令牌。然后他正在等待System.in中的新值。
只有匹配"退出"才能从扫描仪接收令牌。你应该将行改为
if (selectCol.next("quit"))
这样您就可以使用Scanner类javadoc for next(String)提供的方法。