Консольный калькулятор Java
Данная статья написана командой Vertex Academy. Это одна из статей из нашего "Самоучителя по Java."
Условие задачи:
Необходимо написать простой консольный калькулятор на Java.
- Метод int getInt() - должен считывать с консоли целое число и возвращать его
- Метод char getOperation() - должен считывать с консоли какое-то значение и возвращать символ с операцией (+, -, * или /)
- Метод int calc(int num1, int num2, char operation) - должен выполнять над числами num1 и num2 арифметическую операцию, заданную operation.
- Метод main() - должен считывать 2 числа (с помощью getInt()), считать операцию (с помощью getOperation(), передать все методу calc() и вывести на экран результат.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
import java.util.Scanner; public class Calculator { static Scanner scanner = new Scanner(System.in); public static void main(String[] args) { int num1 = getInt(); int num2 = getInt(); char operation = getOperation(); int result = calc(num1,num2,operation); System.out.println("Результат операции: "+result); } public static int getInt(){ System.out.println("Введите число:"); int num; if(scanner.hasNextInt()){ num = scanner.nextInt(); } else { System.out.println("Вы допустили ошибку при вводе числа. Попробуйте еще раз."); scanner.next();//рекурсия num = getInt(); } return num; } public static char getOperation(){ System.out.println("Введите операцию:"); char operation; if(scanner.hasNext()){ operation = scanner.next().charAt(0); } else { System.out.println("Вы допустили ошибку при вводе операции. Попробуйте еще раз."); scanner.next();//рекурсия operation = getOperation(); } return operation; } public static int calc(int num1, int num2, char operation){ int result; switch (operation){ case '+': result = num1+num2; break; case '-': result = num1-num2; break; case '*': result = num1*num2; break; case '/': result = num1/num2; break; default: System.out.println("Операция не распознана. Повторите ввод."); result = calc(num1, num2, getOperation());//рекурсия } return result; } } |
Комментарии к задаче:
Прежде чем решать данную задачу, необходимо разбить задачу на подзадачи. Как видно из картинки ниже, всего есть 3 основных шага:
Поэтому в методе int getInt() мы прописали механику считывания числа с консоли и проверки целочисленное число введено или нет.
1 2 3 4 5 6 7 8 9 10 11 12 |
public static int getInt(){ System.out.println("Введите число:"); int num; if(scanner.hasNextInt()){ num = scanner.nextInt(); } else { System.out.println("Вы допустили ошибку при вводе числа. Попробуйте еще раз."); scanner.next();//рекурсия num = getInt(); } return num; } |
- И потом просто в методе main() вызовем 2 раза метод int getInt(), потому что пользователь будет вводить 2 числа.
- Обратите внимание, что с помощью конструкции if-else мы прописали, что если число целочисленное, тогда присвоить введенное пользователем значение в переменную num, если же не целочисленное, - вывести в консоль "Вы допустили ошибку при вводе числа. Попробуйте еще раз".
- Также обратите внимание, что мы использовали рекурсию в else:
12345else {System.out.println("Вы допустили ошибку при вводе числа. Попробуйте еще раз.");scanner.next(); //рекурсияnum = getInt();}
Выбор операции (+,-,*,/) мы осуществили с помощью метода char getOperation()
1 2 3 4 5 6 7 8 9 10 11 12 |
public static char getOperation(){ System.out.println("Введите операцию:"); char operation; if(scanner.hasNext()){ operation = scanner.next().charAt(0); } else { System.out.println("Вы допустили ошибку при вводе операции. Попробуйте еще раз."); scanner.next();//рекурсия operation = getOperation(); } return operation; } |
Как видите, пользователю предлагается ввести операцию. А далее программа должна распознать было ли введенное пользователем значение типа char или нет. Причем нас устроит только, если пользователь введет: +, - , * или /. Например, если пользователь введет число, нас не устроит. Верно? Поэтому мы применили небольшую "хитрость" вот в этих 2 строчках кода:
1 2 |
if(scanner.hasNext()){ operation = scanner.next().charAt(0); |
Мы с помощью метода сканера next() считали всю строчку. А далее, поскольку нам не нужна вся строка, а нужен только первый элемент строки, то есть нулевой элемент, поэтому мы вызвали еще и метод charAt(0). И таким образом мы получим только значение 0-го элемента, а не всей строки.
Если вдруг подзабыли как работают методы сканера, перечитайте еще раз вот эту статью - "Работа со сканером в Java". А также, если необходимо вспомнить как работает метод charAt(), перечитайте вот эту статью - "charAt() в Java"
И далее мы прописали сам метод int calc(int num1, int num2, int operation):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public static int calc(int num1, int num2, char operation){ int result; switch (operation){ case '+': result = num1+num2; break; case '-': result = num1-num2; break; case '*': result = num1*num2; break; case '/': result = num1/num2; break; default: System.out.println("Операция не распознана. Повторите ввод."); result = calc(num1, num2, getOperation());//рекурсия } return result; } |
Как видите, мы использовали конструкцию switch-case. И прописали, что:
- если пользователь ввел +, тогда num1+num2, то есть суммируем 2 числа, введенных пользователем.
- если пользователь ввел -, тогда num1-num2, то есть из 1-го числа, введенного пользователем вычитаем 2-е число
- и т.д.
Если вдруг Вам необходимо вспомнить как работает конструкция switch-case, перечитайте вот эту статью - "Условный оператор if в Java. Оператор switch"
Также обратите внимание, что здесь мы тоже использовали рекурсию. Вот в этих строчках кода:
1 2 3 |
default: System.out.println("Операция не распознана. Повторите ввод."); result = calc(num1, num2, getOperation());//рекурсия |
И после того как мы прописали все необходимы методы, мы в методе main() прописали следующее:
1 2 3 4 5 6 7 |
public static void main(String[] args) { int num1 = getInt(); int num2 = getInt(); char operation = getOperation(); int result = calc(num1,num2,operation); System.out.println("Результат операции: "+result); } |
- То есть в переменные num1 и num2 будут присвоены, соответственно, 1-е и 2-е число, введенное пользователем.
- В переменную operation будет присвоена операция, которую ввел пользователь: +, - , * или /
- Далее в переменную result будет присвоен результат вычислений "нашего калькулятора"
- И после этого результат будет выведен в консоль
Надеемся - наша статья была Вам полезна. Есть возможность записаться на наши курсы по Java. Детальную информацию смотрите у нас на сайте.