错误在Java中处理InputMismatchException

时间:2014-04-18 23:10:18

标签: java error-handling

我正在创建升力模拟,但我遇到了错误处理问题。当用户输入一个字母而不是整数时,它会抛出一个InputMismatchException。我该如何解决? 以下是代码:

System.out.println("Please define... ");
        System.out.println("Number of floors:");
        Building building = new Building(in.nextInt()); 
        System.out.println("Number of lifts:");
        building.setNoOfLifts(in.nextInt());
        building.setLifts();
        System.out.println("Maximum number of people to enter building at one time:");
        building.setMaxPeople(in.nextInt());
        System.out.println("Maximum capacity of the lifts:");
        int maxLiftCapacity = in.nextInt();
        System.out.println("Simulation will now begin.");
        Queue queue = new Queue();

2 个答案:

答案 0 :(得分:2)

这里有一些可能有所帮助的代码。读取整数并在循环中捕获异常。当输入是整数时,循环退出。抛出异常时,循环继续。

  Scanner sc = new Scanner(System.in);
  int i=0;
  while(true) {
      System.out.println("enter an integer:");
      try {
          int i = sc.nextInt();          
          break;
     } catch(InputMismatchException ignore){}
 }

 // i has been read successfully

答案 1 :(得分:0)

nextInt()仅适用于您确定接下来会获得积分值的情况。 (也就是说,输入来自比用户更可靠的源。)

我有什么建议?最广泛的输入范围是String,所以请选择其中一个。这看起来可能如下所示。

String strFloors = in.nextLine();
strFloors = strFloors.replaceAll("[^\\d]", ""); // Strip non 1234567890 characters
intFloors = Integer.valueOf(strFloors);
Building building = new Building(intFloors);

或者如果你想把它放在一行中,你可以像

一样把它放在一起
Building building = new Building(Integer.valueOf(in.nextLine().replaceAll("[^\\d]", "")));

最好的错误处理是确定没有出现。