输入错误后无法获得输入提示

时间:2016-04-25 22:48:47

标签: java loops exception server client

我正在写一个客户端/服务器猜测游戏。

我有一个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);

使用当前代码,输入字符串只会使客户端线程关闭,不知道为什么。

2 个答案:

答案 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();