Как отловить исключение и продолжить обработку в Java? - PullRequest
0 голосов
/ 06 ноября 2019

Итак, у меня есть программа, которая получает две буквы от пользователя, и если эти две буквы не начинаются с U, C или P, выдает ошибку.

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

Пока это мой код:

import java.util.Scanner;

public class Class113 {

   public static void main(String[] args) {

       // Declare scanner
       Scanner scan = new Scanner(System.in);

       // Display a message to instruct the user
       System.out.println("Enter the designation: ");
       // Receive input
       String str = scan.next();

       try{
           // Verify str is not null and make sure UCP are capital letters whens ubmitted
           if (str != null && (str.charAt(0) == 'U' || str.charAt(0) == 'C' || str.charAt(0) == 'P') && str.length() == 2) {
               System.out.println("Valid designation");
           } else{
               throw new InvalidDocumentCodeException("Invalid designation. Designation must be two characters and start with U, C or P.");
           }
       } catch(InvalidDocumentCodeException invalidDocError){
           System.out.println(invalidDocError);
       }
   }
}

1 Ответ

1 голос
/ 06 ноября 2019

Просто используйте цикл while.

while(true)

фактически бесконечен, но вы можете выйти из него с помощью break.

Я использовал "q" в качестве строки для оповещения о выходе из программы, но вы можете использовать что-то еще, если хотите.

import java.util.Scanner;    

class InvalidDocumentCodeException extends RuntimeException {

    public InvalidDocumentCodeException(String s) {
        super(s);    
    }
}

public class Class113 {

    public static void main(String[] args) {
        // the try here is called try with resource
        // it will close the scanner at the end of the block.
        try(Scanner scan = new Scanner(System.in)){

            while(true){
                // Display a message to instruct the user
                System.out.println("Enter the designation: ");
                // Receive input
                String str = scan.next();

                if(str.equals("q")) break;

                try {
                    // Verify str is not null and make sure UCP are capital letters whens ubmitted
                    if (str.length() == 2 && (str.charAt(0) == 'U' || str.charAt(0) == 'C' || str.charAt(0) == 'P')) {
                        System.out.println("Valid designation");
                    } else{
                        throw new InvalidDocumentCodeException("Invalid designation. Designation must be two characters and start with U, C or P.");
                    }
                } catch(InvalidDocumentCodeException invalidDocError){
                    System.out.println(invalidDocError);
                }
            }
        }
    }
}

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

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