Почему пишет ответ?
Я только начал учить джаву,(2 день) решил сделать супер простой калькулятор. Запустите програму, укажите первое число(50) которое будет больше второго(40) и выберите действие вычитания оно пишет: Ответ 10, ответ 1. Почему пишет ответ один? И как это убрать?
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Перше число:");
int num1 = scanner.nextInt();
System.out.print("Друге число:");
int num2 = scanner.nextInt();
int num3;
System.out.print("Вибери дію:");
String role = scanner.nextLine();
role = scanner.nextLine();
switch (role) {
case "+":
num3 = num1 + num2;
System.out.print("Відповідь " + num3);
break;
case "*":
num3 = num1 * num2;
System.out.print("Відповідь " + num3);
break;
case "-":
if (num1 > num2) {
num3 = num1 - num2;
System.out.print("Відповідь" + num3);
}
else if (num1 < num2) {
num3 = num2 - num1;
System.out.print("Відповідь -"+ num3);
break;
}
case "/":
if (num2 == 0)
System.out.print("На ноль ділити не можна!");
else {
num3 = num1 / num2;
System.out.print("Відповідь " + num3);
break;
}
}}}
Ответы (2 шт):
Из-за неправильно расположенного break в case "-" код выполняет два действия вместо одного -- он "проваливается" в следующую операцию деления, поэтому и получается num1 / num2: 50 / 40 => 1.
Следует вынести break за пределы условных операторов и/или воспользоваться тернарным оператором вместо if/else:
Integer num3 = null;
switch (role) {
case "+":
num3 = num1 + num2;
break;
case "*":
num3 = num1 * num2;
break;
case "-":
num3 = num1 > num2 ? num1 - num2 : num2 - num1;
break;
case "/":
if (num2 != 0) {
num3 = num1 / num2;
}
else {
System.out.println("На ноль делить нельзя!");
}
break;
}
if (num3 != null) {
System.out.println("Ответ: " + num3);
}
Также можно воспользоваться более короткой записью switch-expression, существующей в полной мере в Java 14 и выше; в такой форме записи оператор break не требуется:
Integer num3 = switch (role) {
case "+" -> num1 + num2;
case "*" -> num1 * num2;
case "-" -> num1 > num2 ? num1 - num2 : num2 - num1;
case "/" -> num2 != 0 ? num1 / num2 : null;
default -> null;
}
if (num3 != null) {
System.out.println("Ответ: " + num3);
} else {
System.out.println("Ошибка ввода!");
}
` case "-":
if (num1 > num2) {
num3 = num1 - num2;
System.out.print("Відповідь" + num3);
}else if (num1 < num2) {
num3 = num2 - num1;
System.out.print("Відповідь -"+ num3);
}
break;`
Для решений данной задачи требовалось вынести breack за пределы if/else