如果用户输入String而不是Int,有什么可能的例外情况?

时间:2019-04-01 08:34:49

标签: java error-handling

我只是在玩Java。我试图迫使程序仅接受数字1和2。我相信我已经使用while循环成功完成了此操作(如果输入错误,请更正)。但是,如果用户输入字符串,我该如何打印一条错误语句。例如:“ abc”。

我的代码:

    while (response != 1 && response != 2) {
        System.out.println("Please enter 1 for Car or 2 for Van: ");
        response = scan.nextInt();
    }

    if (response == 1) {
        vehicleType = VehicleType.CAR;
        while (numPassengerSeats < 4 || numPassengerSeats > 7) {
            System.out.println("Please enter the number of Passengers: ");
            numPassengerSeats = scan.nextInt();
        }
    } else {
        vehicleType = VehicleType.VAN;
        while (true) {
            System.out.println("Please enter the last maintenance date (dd/mm/yyyy): ");
            String formattedDate = scan.next();
            lastMaintenanceDate = formatDate(formattedDate);
            if (lastMaintenanceDate != null)
                break;
        }
    }

2 个答案:

答案 0 :(得分:0)

让我们来看看nextInt()的{​​{3}}:

  

将输入的下一个标记扫描为int。对此的调用   nextInt()形式的方法的行为与   调用nextInt(radix),其中radix是此函数的默认基数   扫描器。

     

返回:从输入中扫描的整数

     

投掷

     

InputMismatchException   -如果下一个标记与Integer正则表达式不匹配或超出范围

     

NoSuchElementException-如果输入已用尽

     

IllegalStateException-如果此扫描仪已关闭

根据javadoc,如果用户输入InputMismatchException而不是String,则会抛出int。因此,我们需要处理它。

答案 1 :(得分:-1)

我认为您尚未成功强制程序接受仅整数,因为通过使用java.util.Scanner.nextInt(),用户仍然可以输入非整数,但是java.util.Scanner.nextInt()只会引发异常。请参阅this,以了解可能引发的异常。
我已提出一种解决方案,以强制您的程序仅接受整数。只需遵循以下示例代码:

示例代码:

package main;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        int response = 0;
        Scanner scan = new Scanner(System.in);
        while (response != 1 && response != 2) {
            System.out.println("Please enter 1 for Car or 2 for Van: ");
            try {
                response = Integer.parseInt(scan.nextLine()); 
                if (response != 1 && response != 2) {
                    System.out.println("Input is not in choices!");
                }
            } catch (NumberFormatException e) {
                System.out.println("Input is invalid!");
            }
        }
        scan.close();
    }

}