我正在写一个客户端/服务器猜测游戏。
我有一个guessGameServerHandler类,它为客户端处理游戏的单个实例(游戏是多线程的)
我还有一个客户端类读入输入,然后处理程序响应。
如果用户输入字符串而不是整数,我需要输出错误,然后循环返回并再次请求输入,但似乎无法使其正常工作。有什么建议吗?
客户端代码:(这是在do while循环中,检查输入是否等于正确的数字)
// Read in clients input
System.out.print("Enter guess: ");
guess = Integer.parseInt(stdin.readLine());
// send guess to server
out.write(String.format("%s%n", guess));
out.flush();
guessGameHandlerServer:
do {
try{
// Read in guesses from user
guess = Integer.parseInt(in.readLine());
}catch(NumberFormatException e){
}
gs.guess(guess);
String timeForm = decFor.format(gs.getTimeRemaining() / 1000D);
// Check user input against target number & time left
if (gs.getTimeRemaining() < 1) {
System.out.println(ID + " - (LOSE)" + timeForm + "/" + gs.getGuesses());
client.close();
} else if (gs.getTimeRemaining() > 0 && guess > gs.getTarget() && guess < maxNum) {
out.write(String.format("HIGH:%s:%d%n", timeForm, gs.getGuesses()));
out.flush();
System.out.println(ID + " " + guess + "(HIGH)-" + timeForm + "s/" + gs.getGuesses());
} else if (gs.getTimeRemaining() > 0 && (guess < gs.getTarget() && guess > 0)) {
out.write(String.format("LOW:%s:%d%n", timeForm, gs.getGuesses()));
out.flush();
System.out.println(ID + " " + guess + "(LOW)-" + timeForm + "s/" + gs.getGuesses());
} else if (gs.getTimeRemaining() > 0 && guess == gs.getTarget()) {
out.write(String.format("WIN:%d%n", gs.getGuesses()));
out.flush();
System.out.println(ID + " " + guess + "(WIN)-" + timeForm + "s/" + gs.getGuesses());
} else if (gs.getTimeRemaining() > 0 && (guess >= maxNum || guess < 1)) {
out.write(String.format("ERR:%d%n", gs.getGuesses()));
out.flush();
System.out.println(ID + " ** (ERR out of range)" + timeForm + "/" + gs.getGuesses());
}
} while (true);
使用当前代码,输入字符串只会使客户端线程关闭,不知道为什么。
答案 0 :(得分:0)
在客户端处理异常,如下所示:
while(true) {
try {
System.out.print("Enter guess: ");
guess = Integer.parseInt(stdin.readLine());
break;
}
catch(Exception ex) {
System.out.println("Try again");
}
}
// send guess to server
out.write(String.format("%s%n", guess));
out.flush();
答案 1 :(得分:0)
你需要在do while循环中使用try catch块来捕获NumberFormatException。
try{
System.out.print("Enter guess: ");
guess = Integer.parseInt(stdin.readLine());
}catch(NumberFormatException ne){
//exception handling - set the do while loop condition to true so that it is called again
}
// send guess to server
out.write(String.format("%s%n", guess));
out.flush();