Возможно ли создать метод для обработки исключений с двойным вводом, который может инициализировать переменную в java? - PullRequest
0 голосов
/ 16 марта 2020

Мне интересно, возможно ли создать метод для обработки исключений, например так:

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        do {
            try {
                double a = in.nextDouble();
                double b = in.nextDouble();
                double c = in.nextDouble();

                // some code that works with a, b and c variables
            }
            catch(java.util.InputMismatchException exc) {
                System.out.println("Wrong input.");
                in.next();
            }
        } while(true);
    }

Так что я могу вводить некоторые переменные с клавиатуры, если они не двойные, тогда он говорит «Неправильный ввод». и хочет, чтобы ты снова набрал. Можно ли создать метод, который будет обрабатывать все это? Возможно ли даже в Java создать метод, который может работать следующим образом:

double a, b, c;
myMethodTest(a);

и будет фактически работать так же, как первый код? Как это сделать, если это возможно? Я знаю, что есть ошибка, которая говорит, что «переменная, возможно, не была инициализирована», но есть ли способ обойти это? Может ли метод инициализировать переменную, которую я положил в (), например myMethodTest(a), возможно, инициализировать a и выполнить всю обработку исключений для меня?

Ответы [ 2 ]

1 голос
/ 16 марта 2020

Сделайте это следующим образом:

import java.util.Scanner;

public class Main {
    public static void main(String[] argv) {
        Scanner in = new Scanner(System.in);
        double a, b, c;
        a = getDouble(in, "Enter the value of a: ");
        b = getDouble(in, "Enter the value of b: ");
        c = getDouble(in, "Enter the value of c: ");
        System.out.println(a + ", " + b + ", " + c);
    }

    static double getDouble(Scanner in, String inputMessage) {
        double n = 0;
        boolean valid = true;
        do {
            valid = true;
            System.out.print(inputMessage);
            try {
                n = Double.parseDouble(in.nextLine());
            } catch (NullPointerException | NumberFormatException e) {
                System.out.println("Invalid input. Try again");
                valid = false;
            }
        } while (!valid);
        return n;
    }
}

Пробный прогон:

Enter the value of a: a
Invalid input. Try again
Enter the value of a: abc
Invalid input. Try again
Enter the value of a: 10
Enter the value of b: 10.5
Enter the value of c: hello
Invalid input. Try again
Enter the value of c: 20
10.0, 10.5, 20.0
0 голосов
/ 16 марта 2020

Вы можете проверить как hasNextDouble() для действительного двойного кода. У меня есть образец кода для вас ниже, вы можете изменить его в соответствии с вашими потребностями -

 public static void onlyDouble() {

    double myDouble = 0;
    System.out.println(" Please enter Double");
    do {
        while (! in.hasNextDouble()){
            System.out.println(" Please enter valid Double :");
            in.next();
        }
        myDouble = in.nextDouble();
    }while (myDouble  <= 0);

}

Надеюсь, это поможет вам.

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