Как мне перехватить InputMismatchException для двойных чисел a, b и c в этом коде? - PullRequest
0 голосов
/ 03 апреля 2019

Итак, я создал калькулятор, который решает квадратичную формулу, но я хочу, чтобы программа выдавала исключение, когда переменные a, b или c не являются допустимыми двойными числами. Однако я не могу понять, как включить переменные в уравнения, в которых я хочу, чтобы они были, поэтому вот код.

Я не знаю, какой фон поставить, я действительно новичок в программировании на Java и не могу найти ответы на свои конкретные проблемы где-либо еще.

public static void main(String[] args) {

    Scanner input = new Scanner (System.in); //scanner

    short repeat = 1;
    while (repeat == 1) {

        System.out.println("Enter your equation by entering a, b, and c."); //introduction
        System.out.println("Press enter evey time you enter a number.");

        try {
            double a = input.nextDouble();
        }
        catch (InputMismatchException e) {
            System.out.println("That's not a valid number.");
        }

        double b = input.nextDouble();
        double c = input.nextDouble();

        double answer1 = ( (-b) + Math.sqrt( Math.pow(b, 2) - (4*a*c) ) ) / (2*a); //answers
        double answer2 = ( (-b) - Math.sqrt( Math.pow(b, 2) - (4*a*c) ) ) / (2*a);

        System.out.println("Your answers are: " + answer1 + " and " + answer2);

        System.out.println("Would you like to calculate more numbers? 1 for yes, 0 for no: ");
        repeat = input.nextShort();

    }

input.close();

}

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

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019
public static void main(String[] args) {
    Scanner input = new Scanner (System.in); //scanner

    short repeat = 1;
    while (repeat == 1) {


        System.out.println("Enter your equation by entering a, b, and c."); //introduction
        System.out.println("Press enter evey time you enter a number.");

        try {
            double a = Double.parseDouble(input.nextLine());
            double b = Double.parseDouble(input.nextLine());
            double c = Double.parseDouble(input.nextLine());

            double answer1 = ( (-b) + Math.sqrt( Math.pow(b, 2) - (4*a*c) ) ) / (2*a); //answers
            double answer2 = ( (-b) - Math.sqrt( Math.pow(b, 2) - (4*a*c) ) ) / (2*a);

            System.out.println("Your answers are: " + answer1 + " and " + answer2);
        }
        catch (NumberFormatException e) {
            System.out.println("That's not a valid number.");
        }



        System.out.println("Would you like to calculate more numbers? 1 for yes, 0 for no: ");
        repeat = Short.parseShort(input.nextLine());

    }
    input.close();

}
  • Вы инициализировали переменную повтора в 1, а не в 0, так как в противном случае программа не войдет в цикл while.

  • Вам также нужно поместить свои вычисления для answer1 и answer2 в блок try-catch, потому что, если пользователь вводит недопустимое значение, результат не должен рассчитываться.

  • Вы должны использовать только один экземпляр Scanner, поэтому вы не должны создавать его в цикле.

0 голосов
/ 03 апреля 2019

В соответствии с Java Docs Scanner выдает InputMismatchException, если следующее значение не является допустимым двойным значением, поэтому вам не следует заботиться об этом вручную.

Но если вы хотите отобразить сообщение при возникновении исключения, вы должны перехватить его с помощью блока try-catch и сделать то, что вы хотите.

уравнения не регистрируют переменную a

Это происходит потому, что a является частью области действия блока try. После выхода из этого блока переменная исчезнет.

Что вы, вероятно, хотите сделать, это:

 double a; //declaring variable a (main() method scope)
 try {
     a = input.nextDouble(); //assigning a new value
 }
 catch (InputMismatchException e) {
     System.out.println("That's not a valid number.");
     throw e; //notice, the exception is still thrown after the message is printed
 }

Так что теперь a находится в области действия main метода, и вы можете использовать его после блока try-catch.

...