Как получить определенный тип исключения в Java

#java #exception

#java #исключение

Вопрос:

Я пытаюсь получить конкретное исключение

Ввод H =-1; B = 2;

Ожидаемый результат

java.lang.Исключение: ширина и высота должны быть положительными

Текущий вывод

-2

 public class Solution {
static int H,B;
static boolean flag = true;
static                                         //static initializer block
{
    
    Scanner sc = new Scanner(System.in);
    H=sc.nextInt();
    B=sc.nextInt();
    
}

public static void main(String[] args){
        if(flag){
            int area=B*H;
            System.out.print(area);
        }
        
    }

}
  

Как мне получить это конкретное исключение?

Комментарии:

1. Просто добавьте, если B или H отрицательны, а затем создайте новое исключение (вы помещаете конкретный messega в конструктор).

Ответ №1:

Вы можете создать свое собственное исключение следующим образом

 if(H<0 || B<0){
 throw new Exception("Breadth and height must be positive");
}
  

Однако было бы лучше использовать для этого что-то вроде a IllegalArgumentException .

 if(H<0 || B<0){
 throw new IllegalArgumentException("Breadth and height must be positive");
}
  

Комментарии:

1. Обратите внимание, что «0» является допустимым ответом для области (и 0 не является отрицательным), следовательно, <0 не <1

Ответ №2:

Добавьте это в качестве первых строк вашего основного метода:

 if(B < 1 || H < 1) {
    throw new Exception("Breadth and height must be positive");
}
  

Ответ №3:

Добавьте оператор throw. Вы можете добавить его в блок try catch или вместо этого добавить исключение throws (или более конкретное исключение) в сигнатуру метода (последнее показано ниже):

 import java.util.Scanner;

public class Solution {
    static int H,B;
    static boolean flag = true;

    //static initializer block
    static {
        Scanner sc = new Scanner(System.in);
        H = sc.nextInt();
        B = sc.nextInt();
    }

    public static void main(String[] args) throws Exception {
        if (flag) {
            if (H < 0 || B < 0) {
                throw new Exception("Breadth and height must be positive");
            } else {
                int area = B * H;
                System.out.print(area);
            }
        }
    }
}
  

Или вы могли бы поместить блок try с оператором throw в свой статический блок инициализатора:

 import java.util.Scanner;

public class Solution {
    static int H,B;
    static boolean flag = true;

    //static initializer block
    static {    
        Scanner sc = new Scanner(System.in);
        H = sc.nextInt();
        B = sc.nextInt();

        if (H < 0 || B < 0) {
            try {
                throw new Exception("Breadth and height must be positive");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        if (flag) {
            int area = B * H;
            System.out.print(area);
        }
    }
}