Как написать программу калькулятор на java
В этой статье речь идет об организации простейшего приложения на Java для начинающих разработчиков, которые уже изучили концепции объектного подхода. Но для опытных возможно тоже будет интересно.
Зачастую начинающие разработчики задают вопроc: «С чего начать создание приложения», какие классы использовать и прочее.
Не стоит воспринимать статью как пример «Hello World» для начинающих изучать язык Java и объектно-ориентированный подход. Предполагается, что читатель уже знаком с языком Java, однако у него возникают вопросы указанные выше.
В этой статье мы даем ответ на эти вопросы.
Для того, чтобы строить приложение постепенно, используя концепции объектно-ориентированного подхода мы будем представлять все элементы нашего приложения в виде объектов соответствующих классов. Поэтому приложение тоже будет отдельным классом. Для запуска приложения будем создавать его экземпляр.
Теперь более подробно…
Сначала создается класс Application — он будет моделью всего приложения.
Далее создаем точку входа в приложение — метод main:
Этот метод выполняется при запуске Java с указанием основого класса (Application). В нем мы создаем экземпляр приложения и инициализируем его, а далее запускаем. Для этого будем использовать методы init и run:
В методе init мы делаем необходимую инициализацию приложения. В методе run же распологается основной код хода приложения.
Метод init можно не использовать, однако мы исходим из того, что наше приложение проходит две стадии — инициализация и запуск.
Остальные элементы нашего приложения можно разбить на модельные классы и виды (окна, панели). Например, представим, что мы создаем простейший кредитный калькулятор. Тогда класс CreditCalculator — будет моделью калькулятора. В методе init будем инициализировать калькулятор, а в run вычислять:
Таким образом, создание приложения можно начать с создания класса Application и далее добавлять необходимые модельные классы с которыми требуется работать.
Теперь о том, как запустить приложение
Мы будем исходить из того, что вы используете среду разработки Eclipse, Intellij IDEA или NetBeans. И класс Application создали именно в ней. В этих же средах для запуска нужно вызвать контекстное меню и нажать Run… или Run As Application в редакторе класса Application.
Но все же — запуск приложения из среды не был нашей целью, а целью было понять с каких классов можно начать создание приложения.
Крутых девелоперов просьба не ругать — вы и так все знаете! А лучше поругайте — тогда будет понятно что неправильно.
В этом руководстве мы расскажем, как создать калькулятор на Java для Android. Если вы новичок в программировании и никогда раньше не создавали приложения, ознакомьтесь с нашим предыдущим руководством по написанию первого приложения для Android:
Предполагается, что у вас есть хотя бы минимальный базовый опыт создания Android – приложений .
Полный исходный код калькулятора, описанного ниже, доступен для использования и изменения на github .
Создание проекта
Первое, что нужно сделать - это создать в Android Studio новый проект: Start a new Android Studio project или File - New - New Project :
Для этого руководства мы выбрали в панели « Add an Activity to Mobile » опцию « EmptyActivity », для « MainActivity » мы оставили имя по умолчанию – « Activity ». На этом этапе структура должна выглядеть, как показано на рисунке ниже. У вас есть MainActivity внутри пакета проекта и файл activity_main.xml в папке layout :
Включение привязки данных в проекте
Перед тем, как создать приложение для Андроид с нуля, нужно уяснить, что использование привязки данных помогает напрямую обращаться к виджетам ( Buttons , EditText и TextView ), а не находить их с помощью методов findViewById() . Чтобы включить привязку данных, добавить следующую строку кода в файл build.gradle .
Разработка макета калькулятора
Для включения привязки данных в файле activity_main.xml требуется еще одно изменение. Оберните сгенерированный корневой тег ( RelativeLayout ) в layout , таким образом сделав его новым корневым тегом.
Как научиться создавать приложения для Андроид? Читайте наше руководство дальше.
Тег layout - это предупреждает систему построения приложения, что этот файл макета будет использовать привязку данных. Затем система генерирует для этого файла макета класс Binding . Поскольку целевой XML-файл называется activity_main.xml , система построения приложения создаст класс ActivityMainBinding , который можно использовать в приложении, как и любой другой класс Java . Имя класса составляется из имени файла макета, в котором каждое слово через подчеркивание будет начинаться с заглавной буквы, а сами подчеркивания убираются, и к имени добавляется слово « Binding ».
Теперь перейдите к файлу MainActivity.java . Создайте закрытый экземпляр ActivityMainBinding внутри вашего класса, а в методе onCreate() удалите строку setContentView () и вместо нее добавьте DataBindingUtil.setContentView() , как показано ниже.
Общие принципы создания виджетов макета
В приложении калькулятора есть четыре основных элемента:
RelativeLayout - определяет, как другие элементы будут укладываться или отображаться на экране. RelativeLayout используется для позиционирования дочерних элементов по отношению друг к другу или к самим себе.
TextView - элемент используется для отображения текста. Пользователи не должны взаимодействовать с этим элементом. С помощью TextView отображается результат вычислений.
EditText - похож на элемент TextView, с той лишь разницей, что пользователи могут взаимодействовать с ним и редактировать текст. Но поскольку калькулятор допускает только фиксированный набор вводимых данных, мы устанавливаем для него статус « не редактируемый ». Когда пользователь нажимает на цифры, мы выводим их в EditText .
Button - реагирует на клики пользователя. При создании простого приложения для Андроид мы используем кнопки для цифр и операторов действий в калькуляторе.
Создание макета калькулятора
Код макета калькулятора объемный. Это связано с тем, что мы должны явно определять и тщательно позиционировать каждую из кнопок интерфейса. Ниже представлен фрагмент сокращенной версии файла макета activity_main :
Внутренние компоненты калькулятора
Перед тем, как создать приложение на телефон Android , отметим, что valueOne и valueTwo содержат цифры, которые будут использоваться. Обе переменные имеют тип double , поэтому могут содержать числа с десятичными знаками и без них. Мы устанавливаем для valueOne специальное значение NaN ( не число ) - подробнее это будет пояснено ниже.
Этот простой калькулятор сможет выполнять только операции сложения, вычитания, умножения и деления. Поэтому мы определяем четыре статических символа для представления этих операций и переменную CURRENT_ACTION , содержащую следующую операцию, которую мы намереваемся выполнить.
Затем мы используем класс DecimalFormat для форматирования результата. Конструктор десятичного формата позволяет отображать до десяти знаков после запятой.
Обработка нажатий на цифры
В нашем создаваемом простом приложении для Андроид всякий раз, когда пользователь нажимает на цифру или точку, нам нужно добавить эту цифру в editText . Пример кода ниже иллюстрирует, как это делается для цифры ноль ( 0 ).
Обработка кликов по кнопкам операторов
Обработка нажатия кнопок операторов ( действий ) выполняется по-другому. Сначала нужно выполнить все ожидающие в очереди вычисления. Поэтому мы определяем метод computeCalculation . В computeCalculation , если valueOne является допустимым числом, мы считываем valueTwo из editText и выполняем текущие операции в очереди. Если же valueOne является NaN , для valueOne присваивается цифра в editText .
Продолжаем создавать копию приложения на Андроид . Для каждого оператора мы сначала вызываем computeCalculation() , а затем устанавливаем для выбранного оператора CURRENT_ACTION . Для оператора равно (=) мы вызываем computeCalculation() , а затем очищаем содержимое valueOne и CURRENT_ACTION .
Заключение
Если вы запустите и протестируете данное приложение, то увидите некоторые моменты, которые можно улучшить: 1) возможность нажимать на кнопку оператора, когда editText очищен ( т. е. без необходимости ввода первой цифры ), 2) возможность продолжать вычисления после нажатия кнопки « Равно ».
Полный код примера доступен на github .
Пожалуйста, оставляйте свои отзывы по текущей теме статьи. Мы крайне благодарны вам за ваши комментарии, отклики, лайки, дизлайки, подписки!
Итак, допустим, мы хотим реализовать клиент-серверное приложение, где на стороне клиента будут формироваться нужные данные, а на стороне сервера будет производится расчет и возвращаться клиенту в виде результата. Если брать в расчет простой калькулятор (давайте сделаем его еще проще, 4 оператора, операнды без дробей и работа по схеме [операнд1] [оператор] [операнд2] [результат]) и, допустим, реализовать его на каком-нибудь ЯП (язык программирования), например, Java, с использование сервера приложения (допустим WildFly/JBoss)+клиента (можно взять на вооружение JavaFX), то можно это сделать следующим способом:
Этот же вариант можно решить с использованием RMI (Remote Method Invocation) без сервера, клиента GUI и EJB, в консоли, но этот вариант рассматривать не будем, а приступим к более интересной реализации.
1. Нам понадобятся следующие ингредиенты:
1.1. JDK,
1.2. IDE (с поддержкой Java EE),
1.3. WildFly (или другой сервер приложений для Java),
1.4. SceneBuilder (для удобства и быстрого создания GUI).
Для связи клиента с сервером будем использовать JNDI (служба именования и каталогов), используя EJB (фреймворк для построения бизнес-логики).
2. Создаем реализацию серверной части:
2.1. Удаленный интерфейс, посредством которого будет происходить связь между клиентов и сервером (используем аннотацию Remote — компонент EJB будет использовать RMI).
2.2. Класс, реализующий этот интерфейс (используем аннотацию @Stateless — сеансовый компонент без сохранения состояния).
2.3. Добавим наш класс исключения, который будет сигнализировать деление на ноль или неверный формат.
2.4. С помощью IDE создаем ear-файл (Enterprise Archive), запускаем сервер (можно со стандартным портом), деплоим на него и если ошибок не было замечено, то с серверной частью закончено.
Лог сервера может быть такой:
3. Создаем реализацию клиентской части:
3.1. В SceneBuilder набрасываем следующий макет калькулятора (main.fxml), css пока накручивать не будем:
3.2. Подключаем контроллер класс к fxml-форме, для антиблокировки GUI (залипания формы) при ожидании данных с сервера на кнопку " spoiler">Просмотр кода
3.3. Добавим логику работы простейшего калькулятора:
3.5. Добавляем клиентскую библиотеку (в случае с WildFly это jboss-client.jar), запускаем GUI.
Как видно из приложенных кодов, пользователь набирает в буфер для операндов цифры, выбирает оператора, при нажатии кнопки " v-portal" style="display:none;">
Необходимо написать простой консольный калькулятор на Java.
- Метод int getInt() - должен считывать с консоли целое число и возвращать его
- Метод char getOperation() - должен считывать с консоли какое-то значение и возвращать символ с операцией (+, -, * или /)
- Метод int calc(int num1, int num2, char operation) - должен выполнять над числами num1 и num2 арифметическую операцию, заданную operation.
- Метод main() - должен считывать 2 числа (с помощью getInt()), считать операцию (с помощью getOperation(), передать все методу calc() и вывести на экран результат.
Решение:
Комментарии к задаче:
Прежде чем решать данную задачу, необходимо разбить задачу на подзадачи. Как видно из картинки ниже, всего есть 3 основных шага:
Поэтому в методе int getInt() мы прописали механику считывания числа с консоли и проверки целочисленное число введено или нет.
- И потом просто в методе main() вызовем 2 раза метод int getInt(), потому что пользователь будет вводить 2 числа.
- Обратите внимание, что с помощью конструкции if-else мы прописали, что если число целочисленное, тогда присвоить введенное пользователем значение в переменную num, если же не целочисленное, - вывести в консоль "Вы допустили ошибку при вводе числа. Попробуйте еще раз".
- Также обратите внимание, что мы использовали рекурсию в else:
Выбор операции (+,-,*,/) мы осуществили с помощью метода char getOperation()
Как видите, пользователю предлагается ввести операцию. А далее программа должна распознать было ли введенное пользователем значение типа char или нет. Причем нас устроит только, если пользователь введет: +, - , * или /. Например, если пользователь введет число, нас не устроит. Верно? Поэтому мы применили небольшую "хитрость" вот в этих 2 строчках кода:
Мы с помощью метода сканера next() считали всю строчку. А далее, поскольку нам не нужна вся строка, а нужен только первый элемент строки, то есть нулевой элемент, поэтому мы вызвали еще и метод charAt(0). И таким образом мы получим только значение 0-го элемента, а не всей строки.
Если вдруг подзабыли как работают методы сканера, перечитайте еще раз вот эту статью - "Работа со сканером в Java". А также, если необходимо вспомнить как работает метод charAt(), перечитайте вот эту статью - "charAt() в Java"
И далее мы прописали сам метод int calc(int num1, int num2, int operation):
Как видите, мы использовали конструкцию switch-case. И прописали, что:
- если пользователь ввел +, тогда num1+num2, то есть суммируем 2 числа, введенных пользователем.
- если пользователь ввел -, тогда num1-num2, то есть из 1-го числа, введенного пользователем вычитаем 2-е число
- и т.д.
Если вдруг Вам необходимо вспомнить как работает конструкция switch-case, перечитайте вот эту статью - "Условный оператор if в Java. Оператор switch"
Также обратите внимание, что здесь мы тоже использовали рекурсию. Вот в этих строчках кода:
И после того как мы прописали все необходимы методы, мы в методе main() прописали следующее:
- То есть в переменные num1 и num2 будут присвоены, соответственно, 1-е и 2-е число, введенное пользователем.
- В переменную operation будет присвоена операция, которую ввел пользователь: +, - , * или /
- Далее в переменную result будет присвоен результат вычислений "нашего калькулятора"
- И после этого результат будет выведен в консоль
Надеемся - наша статья была Вам полезна. Есть возможность записаться на наши курсы по Java. Детальную информацию смотрите у нас на сайте.
Calculator in Java is used to calculate addition, subtraction, multiplication, division, modulus, power of numbers, etc. We can do this calculator operation using a plain Java switch case and using Java swing standalone application. In Plain Java calculator operation, we don’t need any extra libraries, but we must require java.awt.event in the case of swing application.*, javax.swing.*, java.awt.*packages.
Methods of Calculator in Java
Swing methods for the calculator:
Web development, programming languages, Software testing & others
- add(Component component): It is used to add the component to the container.
- setSize(int x, int y): It is used to set the size of the container as per given dimensions.
- setText(String string): It is used to set the string text.
- getText(): It is used to get the text of the container.
- addActionListenerListener(ActionListener actionListener): It is used to set the action to the container.
- setBackground(Color color) : It is used to set the background color.
How to Create a Calculator in Java?
We can create a calculator in 2 ways:
- Using the Switch Case Statement.
- Using Swing graphics.
1. Using the Switch Case Statement
Step 1: User enters the character for which operation wants to perform like “+”, “-”, “*”, “/”, “%”, “^” etc.
Step 2: Within the switch case, we have implemented logic for each character.
Step 3: Based on character operation performed like addition, subtraction, multiplication, division, modulus (finds remainder) and power of the number.
Syntax:
public class CalculatorSwitchCase
//Ask input from user
switch(character)
case ‘+’://addition operation
case ‘-’://subtraction operation
case ‘*’://multiplication operation
case ‘/’://division operation
case ‘%’://modulus operation
case ‘^’://power operation
>
//display output
>
Code:
//package com.calculator;
import java.util.Scanner;
public class CalculatorSwitchCase public static void main(String[] args) // declaring varibales
double firstNumber, secondNumber;
double result_operation_output;
// Creating scanner for object for allow input
Scanner scannerObject = new Scanner(System.in);
do System.out.println("============================================= 1. + for ADDITION");
System.out.println("2. - for SUBTRACTION");
System.out.println("3. * for MULTIPLICATION");
System.out.println("5. 4. / for DIVISION");
System.out.println("6. % for REMAINDER");
System.out.println("7. ^ for POWER");
System.out.println("8. Q for QUIT");
System.out.println("============================================= Enter your first number:\n");
firstNumber = scannerObject.nextDouble();
// ask the user to enter second number
System.out.print("Enter your second number:\n");
secondNumber = scannerObject.nextDouble();
System.out.print("Enter an operators like (+, -, *, /, %, ^) only:\n ");
// storing the operator in char object
char operator = scannerObject.next().charAt(0);
switch (operator) case '+':
result_operation_output = firstNumber + secondNumber;
break;
case '-':
result_operation_output = firstNumber - secondNumber;
break;
case '*':
result_operation_output = firstNumber * secondNumber;
break;
case '/':
result_operation_output = firstNumber / secondNumber;
break;
case '%':
result_operation_output = firstNumber % secondNumber;
break;
case '^':
result_operation_output = Math.pow(firstNumber, secondNumber);
break;
case 'Q':
System.exit(0);
default:
System.out.printf("Please enter specified operator only");
return;
>
System.out.println(firstNumber + " " + operator + " " + secondNumber + " is : " + result_operation_output);
> while (result_operation_output != 'Q');
scannerObject.close();
>
>
Java Training (40 Courses, 29 Projects, 4 Quizzes) 40 Online Courses | 29 Hands-on Projects | 285+ Hours | Verifiable Certificate of Completion | Lifetime Access | 4 Quizzes with Solutions
4.8 (13,244 ratings)
Output:
o/p for addition and subtraction
o/p for multiplication and division
o/p for remainder and power
2. Using Swing Graphics
Step1: Creating a class and extends it from JFrame, ActionerListener.
Step2: Creating buttons for numbers from 0-9 and character buttons like +, -, *, *, % etc.
Step3: Write an Action listener for all the buttons.
Step4: Add all these components to the Screen.
Example 2 – Swing Calculator
//package com.calculator.swing;
//Javaprogramtocreateasimplecalculator
//withbasic+,-,/,*usingjavaswingelements
importjava.awt.Color;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
importjavax.swing.JTextField;
importjavax.swing.UIManager;
@SuppressWarnings("serial")
publicclassCalculatorSwingextendsJFrameimplementsActionListener //createaframe
staticJFrameframeToDisplay;
//createatextfield
staticJTextFieldlabeTextField;
//itstoretheoperandsandoperators
Stringstring0,string1,string2;
//constructor
CalculatorSwing() string0=string1=string2="";
>
//mainfunctiontojavaapplication
publicstaticvoidmain(Stringargs[]) //createtheframetodisplaythescreen
frameToDisplay=newJFrame("MyCalculator");
try //usedtosetthelookandfeelfortheapplication
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
>catch(Exceptionexception) System.err.println(exception.getMessage());
>
//createtheclassobject
CalculatorSwingcalculatorSwing=newCalculatorSwing();
//createtextfield
labeTextField=newJTextField(16);
//settothenoneditable
labeTextField.setEditable(false);
//declaringnumbersbuttonsandoperatorsbuttons
JButtonbutton_0,button_1,button_2,button_3,button_4,button_5,button_6,button_7,button_8,button_9,
button_add,button_subtract,button_div,button_mul,button_dot,button_equal1,button_equal2;
//creatingnumbersbuttons
button_0=newJButton("0");
button_1=newJButton("1");
button_2=newJButton("2");
button_3=newJButton("3");
button_4=newJButton("4");
button_5=newJButton("5");
button_6=newJButton("6");
button_7=newJButton("7");
button_8=newJButton("8");
button_9=newJButton("9");
//creatingequalsbuttons
button_equal2=newJButton(" +");
button_subtract=newJButton("-");
button_div=newJButton("/");
button_mul=newJButton("*");
button_equal1=newJButton("C");
//creatingdot(.)buttons
button_dot=newJButton(".");
//creatingpanel
JPaneljPanel=newJPanel();
//addingactionlistenerstothebuttons
button_mul.addActionListener(calculatorSwing);
button_div.addActionListener(calculatorSwing);
button_subtract.addActionListener(calculatorSwing);
button_add.addActionListener(calculatorSwing);
button_9.addActionListener(calculatorSwing);
button_8.addActionListener(calculatorSwing);
button_7.addActionListener(calculatorSwing);
button_6.addActionListener(calculatorSwing);
button_5.addActionListener(calculatorSwing);
button_4.addActionListener(calculatorSwing);
button_3.addActionListener(calculatorSwing);
button_2.addActionListener(calculatorSwing);
button_1.addActionListener(calculatorSwing);
button_0.addActionListener(calculatorSwing);
button_dot.addActionListener(calculatorSwing);
button_equal1.addActionListener(calculatorSwing);
button_equal2.addActionListener(calculatorSwing);
//addallelementstothepanel
jPanel.add(labeTextField);
jPanel.add(button_add);
jPanel.add(button_1);
jPanel.add(button_2);
jPanel.add(button_3);
jPanel.add(button_subtract);
jPanel.add(button_4);
jPanel.add(button_5);
jPanel.add(button_6);
jPanel.add(button_mul);
jPanel.add(button_7);
jPanel.add(button_8);
jPanel.add(button_9);
jPanel.add(button_div);
jPanel.add(button_dot);
jPanel.add(button_0);
jPanel.add(button_equal1);
jPanel.add(button_equal2);
//setbackgroundofthepanel
jPanel.setBackground(Color.darkGray);
//addthepaneltotheframe
frameToDisplay.add(jPanel);
frameToDisplay.setSize(210,230);
frameToDisplay.show();
>
//actionlistenerimplementation
publicvoidactionPerformed(ActionEvente) Stringinput=e.getActionCommand();
//checkifthegiven valueisnumber
if((input.charAt(0)>='0'&&input.charAt(0) <='9')||input.charAt(0)=='.')//ifoperandispresentthenaddtosecondno
if(!string1.equals(""))
string2=string2+input;
else
string0=string0+input;
//setthevaluetothetext
labeTextField.setText(string0+string1+string2);
>elseif(input.charAt(0)=='C') //clearing
string0=string1=string2="";
//setthevalueofthetext
labeTextField.setText(string0+string1+string2);
>elseif(input.charAt(0)=='=') doubleequalsInput;
//storethevalueinthefirstindex
if(string1.equals("+"))
equalsInput=(Double.parseDouble(string0)+Double.parseDouble(string2));
elseif(string1.equals("-"))
equalsInput=(Double.parseDouble(string0)-Double.parseDouble(string2));
elseif(string1.equals("/"))
equalsInput=(Double.parseDouble(string0)/Double.parseDouble(string2));
else
equalsInput=(Double.parseDouble(string0)*Double.parseDouble(string2));
//setthevalueofthetext
labeTextField.setText(string0+string1+string2+" ";
>else //ifnooperandisthere
if(string1.equals("")||string2.equals(""))
string1=input;
else doublete;
//storethevalueinthefirstindex
if(string1.equals("+"))
te=(Double.parseDouble(string0)+Double.parseDouble(string2));
elseif(string1.equals("-"))
te=(Double.parseDouble(string0)-Double.parseDouble(string2));
elseif(string1.equals("/"))
te=(Double.parseDouble(string0)/Double.parseDouble(string2));
else
te=(Double.parseDouble(string0)*Double.parseDouble(string2));
//convertinginttostring
string0=Double.toString(te);
//puttheoperator
string1=input;
//taketheoperandasblank
string2="";
>
//setthevalueofthetext
labeTextField.setText(string0+string1+string2);
>
>
>
Output:
Conclusion
Java Calculator is used to calculating operations like addition, subtraction, division, multiplication, modulus, and power. This calculator in Java can be done in 2 ways by using a switch case statement and by using swing API.
Recommended Articles
This is a guide to Calculator in Java. Here we discuss the Introduction to Calculator in Java and its different Methods and Examples and Code Implementation. You can also go through our other suggested articles to learn more –
Читайте также: