Какие возможны исключения, если пользователь вводит String вместо Int? - PullRequest
0 голосов
/ 01 апреля 2019

Я просто играю с 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 голосов
/ 01 апреля 2019

Я думаю, что вы не смогли принудительно заставить вашу программу принимать только целые числа, поскольку с помощью 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();
    }

}
0 голосов
/ 01 апреля 2019

Давайте посмотрим на javadoc для nextInt():

Сканирует следующий токен ввода как int. Вызов этого метод вида nextInt () ведет себя точно так же, как вызов nextInt (основание), где основание является основанием по умолчанию этого сканер.

Возвращает : int, отсканированный с входа

Броски :

InputMismatchException - если следующий токен не соответствует регулярному выражению Integer или находится вне диапазона

NoSuchElementException - если ввод исчерпан

IllegalStateException - если этот сканер закрыт

Согласно javadoc, он выдает InputMismatchException, если пользователь вводит String вместо int. Итак, нам нужно с этим справиться.

...