如何在catch块后询问用户输入

时间:2016-01-10 06:28:36

标签: java exception

这是一款猜谜游戏。我想在错误信息后输入用户输入,但我的口号继续无限打印..请帮助我。 如果我输入信件,它将打印出来  “号码无效!再试一次。”  “号码无效!再试一次。”  “号码无效!再试一次。”  “号码无效!请再试一次。”

import java.util.*;
public class RandomGame {

   public static Scanner sc = new Scanner(System.in);
   public static void main(String args[]) {
      Random rand = new Random();

      int x = rand.nextInt(50);
      int counter = 0;
      int y;
      boolean flag = false;

      System.out.print("Give a number from 1-50:");

      while(!flag) {

         flag = true;
         try {    
            y = sc.nextInt();
            if (y < x) {
               counter++;
               System.out.println("Too low. Try again");
               flag = false;
            } else if (y > x) {
               counter++;
               System.out.println("Too high. Try again");
               flag = false;
            } else if (x == y) {
               counter++;
               System.out.println("you got it " + counter + " attempt(s):");
               flag = true;
            }
         } catch(InputMismatchException | NumberFormatException e1) {
            System.out.println("Invalid Number! Try again.");
         }
         flag = false;

      }

      System.out.println(x);
   }

}

2 个答案:

答案 0 :(得分:2)

您的问题是nextInt无法从流中删除有问题的字符,因此您会一遍又一遍地遇到相同的错误。

您最好拨打next而不是nextInt,然后尝试使用String将生成的int解析为Integer.parseInt 。这样,如果流的内容是非数字的,它实际上将从流中删除。

答案 1 :(得分:-1)

对于这类事情你也可以使用“finally”关闭,

try{}
catch(Exception e){}
finally{}

最终总是有效(即使没有任何异常),即使有任何异常 即使出现错误,它也可以帮助程序正常工作。