#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);
}
}
}