Как улучшить код простенького консольного калькулятора?
Только начал изучать Java, решил написать простенький консольный калькулятор. Как код можно улучшить? (Желательно с объяснением)
import java.util.*;
public class Calculator {
public void calkulate() {
Scanner number = new Scanner(System.in);
System.out.println("Введите 1 число");
int firstNum = number.nextInt();
System.out.println("Введите 2 число");
int secondNum = number.nextInt();
System.out.println("Введите математическое действие ");
System.out.println("А именно:'+' или '-' или '*' или '/'");
String sing = number.next();
number.close();
if(sing.equals("+")){
System.out.print("Сумма цифр = ");
System.out.println(firstNum + secondNum);
}else{
if(sing.equals("-")){
System.out.print("Разность цифр = ");
System.out.println(firstNum - secondNum);
}else{
if(sing.equals("*")){
System.out.print("Произведение цифр = ");
System.out.println(firstNum * secondNum);
}else{
if(sing.equals("/")){
System.out.print("Деление цифр = ");
System.out.println(firstNum / secondNum);
}
}
}
}
}
}
Ответы (2 шт):
Автор решения: Aziz Umarov
→ Ссылка
Как написал @Stranger уберите вложенность
И лучше сделать через switch читается лучше
switch(sign) {
case "+":
.....
break;
case "-":
.....
}
Извините что не написал полностью. С телефона набираю
Автор решения: Стас
→ Ссылка
Лучше поздно чем никогда...
Дополню ответ @Aziz Umarov
import java.util.InputMismatchException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int first, second, res;
try {
System.out.print("First: ");
first = scan.nextInt();
System.out.print("Second: ");
second = scan.nextInt();
} catch (InputMismatchException e) {
System.err.println("Invalid number");
return;
}
System.out.print("Action: ");
try {
switch (scan.next().charAt(0)) {
case '+':
res = first + second;
break;
case '-':
res = first - second;
break;
case '*':
res = first * second;
break;
case '/':
res = first / second;
break;
default:
System.err.println("Invalid action");
return;
}
System.out.println(res);
} catch (ArithmeticException e) {
System.err.println("Division by zero");
}
}
}
- Заменил вложенный
if/elseнаswitch case - Добавил немного обработки исключений (при неверном вводе или делении на 0)
- Добавил ветку
defaultдля обработки неверной операции.
Также замечу, что switch case на char работает быстрее, чем на строках - поэтому я сделал через него.