Почему мой код создает исключение ArithmeticException, когда я ожидаю, что он просто выведет "Error"?
Я сделал программу, которая просит пользователя ввести два числа, и она должна выдавать ошибку, если второе число равно 0. Однако я получаю сообщение об ошибке, которое приведено ниже. У меня есть заявление if-else, но оно не делает то, что я ожидаю. Я не уверен, что я делаю неправильно.
public static void main(String[] args) {
int x, y;
Scanner kbd = new Scanner(System.in);
System.out.print("Enter a: ");
x = kbd.nextInt();
System.out.print("Enter b: ");
y = kbd.nextInt();
int result = add(x, y);
int result2 = sub(x, y);
int result3 = multi(x, y);
int result4 = divide(x, y);
int result5 = mod(x, y);
System.out.println(x + " + " + y + " = " + result);
System.out.println(x + " - " + y + " = " + result2);
System.out.println(x + " * " + y + " = " + result3);
System.out.println(x + " / " + y + " = " + result4);
System.out.print(x + " % " + y + " = " + result5);
}
public static int add(int x, int y) {
int result;
result = x + y;
return result;
}
public static int sub(int x, int y) {
int result2;
result2 = x - y;
return result2;
}
public static int multi(int x, int y) {
int result3;
result3 = x * y;
return result3;
}
public static int divide(int x, int y) {
int result4;
result4 = x / y;
if (y == 0) {
System.out.print("Error");
} else {
result4 = x / y;
}
return result4;
}
public static int mod(int x, int y) {
int result5;
result5 = x % y;
if (y == 0) {
System.out.print("Error");
} else {
result5 = x % y;
}
return result5;
}
Вывод получаю эту ошибку..
Enter a: 10
Enter b: 0
Exception in thread "main" java.lang.ArithmeticException: / by zero
3 ответа
Вы получаете это, потому что когда вы делите на 0, Java выдает исключение. Если вы просто хотите использовать оператор if для его обработки, используйте что-то вроде этого:
public static int divide(int x, int y){
int result;
if ( y == 0 ) {
// handle your Exception here
} else {
result = x/y;
}
return result;
}
Java также обрабатывает исключения через блоки try/catch, которые запускают код в try
блок и будет обрабатывать, как исключения обрабатываются в catch
блок. Так что вы могли бы сделать:
try {
result4 = divide(a, b);
}
catch(//the exception types you want to catch ){
// how you choose to handle it
}
Хорошо, я скопировал-вставил ваш код дословно, окружил его в классе, импортировал java.util.Scanner
и беги javac
, Насколько я вижу, у вас есть два дополнения "}" в конце вашего файла. У вас также есть другие проблемы: result4 и result5 не инициализируются, и компилятор сходит с ума от вас, потому что если y == 0 true, то возвращаемые значения divide
а также mod
методы не определены.
public static void main(String[] args) {
int x,y;
Scanner kbd = new Scanner(System.in);
System.out.print("Enter a: ");
x = kbd.nextInt();
System.out.print("Enter b: ");
y = kbd.nextInt();
int result = add(x,y);
int result2 = sub(x,y);
int result3 = multi(x,y);
int result4 = divide(x,y);
int result5 = mod(x,y);
System.out.println(x +" + "+ y +" = "+ result);
System.out.println(x +" - "+ y +" = "+ result2);
System.out.println(x +" * "+ y +" = "+ result3);
System.out.println(x +" / "+ y +" = "+ result4);
System.out.print(x +" % "+ y +" = "+ result5);
}
public static int add(int x, int y){
int result;
result = x+y;
return result;
}
public static int sub(int x, int y){
int result2;
result2 = x-y;
return result2;
}
public static int multi(int x, int y){
int result3;
result3 = x * y;
return result3;
}
public static int divide(int x, int y){
int result4;
result4 = 0;
if ( y == 0 ) {
System.out.print("Error");
}
else{
result4 = x/y;
}
return result4;
}
public static int mod(int x, int y){
int result5;
result5 = 0;
if ( y == 0) {
System.out.println("Error!");
}
else{
result5 = x % y;
}
return result5;
}
}
выход
Enter a: 4
Enter b: 0
ErrorError!
4 + 0 = 4
4 - 0 = 4
4 * 0 = 0
4 / 0 = 0
4 % 0 = 0