Определенный пользователем класс исключения: незарегистрированное исключение InvalidUserInputException;должен быть пойман или объявлен брошенным - PullRequest
0 голосов
/ 22 октября 2018

Я учусь делать свои собственные исключения в Java прямо сейчас и смотрю на эту страницу руководства как на ссылку (https://www.tutorialspoint.com/java/java_exceptions.htm)) и пытаюсь максимально адаптировать то, что они сделали, к тому, что я хочуПрежде всего, у меня есть программа, которая принимает данные от моего пользователя. Чтобы убедиться, что мой пользователь вводит только правильные варианты, мне нужно выдать исключение, когда они пытаются заказать недопустимый тип транспортного средства.

Когда я пытаюсь скомпилировать мою программу, я получаю следующую ошибку:

Orders.java:25: error: unreported exception InvalidUserInputException; must be caught or declared to be thrown orderNewVehicle(Orders); ^

внутри основного метода:

try{
    orderNewVehicle(Orders);
} catch (InvalidUserInputException e){
    System.out.println("You've requested an invalid vehicle type. Please only enter " + e.getValidVehicles());
    orderNewVehicle(Orders);
}

orderNewVehicle метод, который должен вызвать мое исключение:

public static void orderNewVehicle(ArrayList listOfOrders) throws InvalidUserInputException{

    String vehicleType = "";
    System.out.print("Do you want to order a Truck (T/t), Car (C/c), Bus(M/m), Zamboni(Z/z), or Boat(B/b)? ");
    Boolean validVehicle = false;   
    while(validVehicle.equals(false)) {
        Scanner scan = new Scanner(System.in);
        String potentialInput = scan.next();
        if(!(potentialInput.equals("c") || potentialInput.equals("C") || potentialInput.equals("t") || potentialInput.equals("T") || potentialInput.equals("b") || potentialInput.equals("B") || potentialInput.equals("m") || potentialInput.equals("M") || potentialInput.equals("z") || potentialInput.equals("Z"))) {
            // System.out.print("Invalid input. Only enter c/C for Car, t/T for Truck, m/M for Bus, z/Z for Zamboni, or b/B for Boat. Please Try Again: ");
            scan.nextLine(); //Clear carriage return if one present
            throw new InvalidUserInputException();
        } else {
            validVehicle = true;
            vehicleType = potentialInput;
            scan.nextLine();   
        }            
    }
    System.out.println("");
    // stuff that happens once we get past the input check

}

мой класс исключений:

public class InvalidUserInputException extends Exception {
    private String vehicleTypes = "c/C for Car, t/T for Truck, m/M for Bus, z/Z for Zamboni, or b/B for Boat";

    public InvalidUserInputException() {

    }

    public String getValidVehicles() {
        return vehicleTypes;
    }
}

1 Ответ

0 голосов
/ 22 октября 2018

Проблема с вашей текущей логикой заключается в том, что в блоке catch вы снова вызываете метод, который может вызвать исключение.Компилятор просто говорит вам, что вам нужно перехватить и другое исключение.

В качестве немедленного решения вашей проблемы вы можете попробовать что-то вроде этого:

final String msg = "You've requested an invalid vehicle type. Please only enter ";
boolean success = false;
do {
    try {
        orderNewVehicle(Orders);
        success = true;
    }
    catch (InvalidUserInputException e){
        System.out.println(msg + e.getValidVehicles());
    }
} while (!success);

Ввыше версии, мы зацикливаемся, вызывая orderNewVehicle, пока не будет сделан успешный вызов.Мы знаем, что вызов был успешным, если для флага success можно установить значение true, что будет означать, что InvalidUserInputException имеет , а не .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...