Почему пишет ответ?

Я только начал учить джаву,(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 шт):

Автор решения: Nowhere Man

Из-за неправильно расположенного 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("Ошибка ввода!");
}
→ Ссылка
Автор решения: David Tepols
` 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

→ Ссылка