Специфика обработки исключений Java - PullRequest
2 голосов
/ 12 марта 2019

Я думаю, что легче объяснить мой вопрос, если я сначала покажу свой код, поэтому вот оно:

import java.util.Scanner;
public class a{
    public static void main(String[]args){
        Scanner s = new Scanner(System.in);
        System.out.print("Enter either a, b, or c: ");
        try{
            String a = s.nextLine();
            if (!a.equalsIgnoreCase("a")&&!a.equalsIgnoreCase("b")&&!a.equalsIgnoreCase("c")){
                throw new IllegalArgumentException();
            }
            System.out.print("Entered letter: "+a);
        }
        catch (IllegalArgumentException b){
            System.out.println("Invalid input. Only enter a, b, or c.");
        }
    }
}

У меня вопрос, есть ли способ сделать три (3) разных оператора catch, чтобы указать в сообщении об ошибке, что пользователь ввел

  1. другая буква, отличная от a, b или c;
  2. небуквенный символ (число или символ) ИЛИ
  3. пробел?

То, что пришло мне в голову из-за ошибки с числом, было NumberF

1 Ответ

2 голосов
/ 12 марта 2019

Вместо создания трех отдельных блоков захвата вы можете изменить catch на:

try {
    String a = s.nextLine();
    if (!a.equalsIgnoreCase("a") && !a.equalsIgnoreCase("b") && !a.equalsIgnoreCase("c")) {
        throw new IllegalArgumentException(a);                 // observe this
    }
    System.out.print("Entered letter: " + a);
} catch (IllegalArgumentException ex) {
    String input = ex.getMessage();

    // check for spaces
    if (input.trim().length() == 0) {
        System.out.println("Only black spaces entered");
    } 

    // check for numeric/special characters
    else if (input.matches("^[0-9!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]*$")) {
        System.out.println("User entered a non-letter character (number or symbol)");
    } 

    // check if it isn't a, b or c
    else if ((!input.trim().matches("a|b|c"))) {
        System.out.println("User entered value other than a, b or c");
    }
}

Обратите внимание:

  1. Мы включаемввод, введенный пользователем при выдаче исключения
  2. В блоке catch мы извлекаем значение, введенное пользователем, а затем на основе некоторых , если условий выводит на печать требуемые исключения.

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

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