Отсутствуют части ожидаемого вывода от конструкции Java try-catch - PullRequest
2 голосов
/ 10 июля 2020

Вопрос: Создайте программу под названием ValidateThird, которая вводит номер оценки (0-5) от пользователя. Если введен действительный номер оценки, программа должна напечатать «ОК». В противном случае программа должна напечатать введенное значение, а «оценка не является допустимой». и снова предложите номер оценки. Программа должна продолжать запрашивать номера оценок, пока пользователь не введет правильный номер оценки.

Мой код:

package chapter1.basic;

import java.util.*;

public class ValidateThird {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in); 
        
        boolean continueInput = true;
        
        do {
            
            try {
                
                System.out.print("Enter grade (0-5): ");
                
                String input1 = input.nextLine();
                
                int grade = Integer.parseInt(input1);
             
                if (grade > 5) {
                    System.out.print(input1);
                    throw new NumberFormatException (); 
                }
                else {
                    System.out.println("OK"); 
                }
                continueInput = false;
            }
            catch (NumberFormatException ex) {

                System.out.println(" is not a valid grade.");
                
            }
        } while(continueInput); 
    }
}

Мой результат:

Enter grade (0-5): 9

9 is not a valid grade.

Enter grade (0-5): two

 is not a valid grade.

Enter grade (0-5): 4

OK

, Мой ожидаемый результат :

Enter grade (0-5): 9

9 is not a valid grade.

Enter grade (0-5): two

two is not a valid grade.

Enter grade (0-5): 4

OK

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

Заранее спасибо!

1 Ответ

1 голос
/ 10 июля 2020

Вы можете переместить переменную за пределы области try, чтобы она была видна в catch, например:

    public static void main(String[] args) throws Exception, IOException {
        Scanner scanner = new Scanner(System.in);
        String str = "";
        boolean continueInput = true;

        do {
            try {
                System.out.print("Enter grade (0-5): ");
                str = scanner.nextLine();
                int grade = Integer.parseInt(str);

                if (grade > 5) {
                    System.out.print(str);
                    throw new NumberFormatException();
                } else {
                    System.out.println("OK");
                }
                continueInput = false;
            } catch (NumberFormatException ex) {
                System.out.println(str + " is not a valid grade.");
            }
        } while (continueInput);
        scanner.close();
    }
...