Исключения. Как мне это исправить? Первые шаги - PullRequest
0 голосов
/ 06 января 2019

Несколько недель назад я начал изучать Java. Я новичок, и я делаю много ошибок. Сегодня я пытаюсь узнать об исключениях. Я написал программу, которая вычисляет квадрат прямоугольника, но он не работает, когда я помещаю в сторону "a", например, букву c. Я хотел бы, чтобы он показывал мне строку типа «У нас есть проблема;)», но выдает ошибку. Вы можете мне помочь?

package Learning;
import java.io.*;
import java.util.Scanner;

public class Exceptions {
    public static void main(String[] args) throws IOException {
        double a,b,wynik;
        Scanner odc = new Scanner(System.in);
        try {
            System.out.println("Enter side a: ");
            a = odc.nextDouble();
            System.out.println("Enter side b: ");
            b = odc.nextDouble();
            wynik=a*b;
            System.out.println("Field equals: "+wynik);
        }
        catch(NumberFormatException e){
            System.out.println("We have a problem ;)");
        }
    }
}

Когда я кладу в сторону буквы "c", у меня есть что-то вроде этого:

Exception in thread "main" java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextDouble(Scanner.java:2564)
    at Learning.Exceptions.main(Exceptions.java:11)

Мне нужно увидеть: «У нас проблема;)»

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Ваш код никогда не выбрасывает NumberFormatException.
Невозможность преобразовать ввод в double уже передана InputMismatchException.

Обратите внимание, что NumberFormatException и InputMismatchException являются непроверенными исключениями (они происходят из RuntimeException).
Исключения такого рода могут быть сгенерированы, даже если они не были объявлены как сгенерированные какими-либо вызванными методами.
Поэтому, как правило, вы можете захотеть поймать их, потому что вы знаете, что они могут быть брошены, и вы хотите справиться с этим. Но вы должны знать, что нужно ловить только их, когда они могут быть эффективно брошены, поскольку это делает код более понятным.
Здесь дело не в этом.

Так что в вашем случае этого достаточно:

try {
    System.out.println("Enter side a: ");
    a = odc.nextDouble();
    System.out.println("Enter side b: ");
    b = odc.nextDouble();
    wynik=a*b;
    System.out.println("Field equals: "+wynik);
}
catch(InputMismatchException e){
    System.out.println("We have a problem ;)");
}
0 голосов
/ 06 января 2019

поймать InputMismatchException:

catch(NumberFormatException | InputMismatchException e){ ... }

System.out.println("We have a problem ;)"); будет выполнено, если возникнет NumberFormatException или InputMismatchException.

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

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