Как написать программу калькулятор на java

Обновлено: 05.07.2024

Итак, допустим, мы хотим реализовать клиент-серверное приложение, где на стороне клиента будут формироваться нужные данные, а на стороне сервера будет производится расчет и возвращаться клиенту в виде результата. Если брать в расчет простой калькулятор (давайте сделаем его еще проще, 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.

Как видно из приложенных кодов, пользователь набирает в буфер для операндов цифры, выбирает оператора, при нажатии кнопки " tm-article-presenter__meta">

Необходимо написать простой консольный калькулятор на Java.

  • Метод int getInt() - должен считывать с консоли целое число и возвращать его
  • Метод char getOperation() - должен считывать с консоли какое-то значение и возвращать символ с операцией (+, -, * или /)
  • Метод int calc(int num1, int num2, char operation) - должен выполнять над числами num1 и num2 арифметическую операцию, заданную operation.
  • Метод main() - должен считывать 2 числа (с помощью getInt()), считать операцию (с помощью getOperation(), передать все методу calc() и вывести на экран результат.


Решение:

System . out . println ( "Вы допустили ошибку при вводе числа. Попробуйте еще раз." ) ; System . out . println ( "Вы допустили ошибку при вводе операции. Попробуйте еще раз." ) ; public static int calc ( int num1 , int num2 , char operation ) < System . out . println ( "Операция не распознана. Повторите ввод." ) ; result = calc ( num1 , num2 , getOperation ( ) ) ; //рекурсия

Комментарии к задаче:

Прежде чем решать данную задачу, необходимо разбить задачу на подзадачи. Как видно из картинки ниже, всего есть 3 основных шага:


Поэтому в методе int getInt() мы прописали механику считывания числа с консоли и проверки целочисленное число введено или нет.

System . out . println ( "Вы допустили ошибку при вводе числа. Попробуйте еще раз." ) ;

  • И потом просто в методе main() вызовем 2 раза метод int getInt(), потому что пользователь будет вводить 2 числа.
  • Обратите внимание, что с помощью конструкции if-else мы прописали, что если число целочисленное, тогда присвоить введенное пользователем значение в переменную num, если же не целочисленное, - вывести в консоль "Вы допустили ошибку при вводе числа. Попробуйте еще раз".
  • Также обратите внимание, что мы использовали рекурсию в else:

System . out . println ( "Вы допустили ошибку при вводе числа. Попробуйте еще раз." ) ;

Выбор операции (+,-,*,/) мы осуществили с помощью метода char getOperation()

System . out . println ( "Вы допустили ошибку при вводе операции. Попробуйте еще раз." ) ;

Как видите, пользователю предлагается ввести операцию. А далее программа должна распознать было ли введенное пользователем значение типа char или нет. Причем нас устроит только, если пользователь введет: +, - , * или /. Например, если пользователь введет число, нас не устроит. Верно? Поэтому мы применили небольшую "хитрость" вот в этих 2 строчках кода:

Мы с помощью метода сканера next() считали всю строчку. А далее, поскольку нам не нужна вся строка, а нужен только первый элемент строки, то есть нулевой элемент, поэтому мы вызвали еще и метод charAt(0). И таким образом мы получим только значение 0-го элемента, а не всей строки.

Если вдруг подзабыли как работают методы сканера, перечитайте еще раз вот эту статью - "Работа со сканером в Java". А также, если необходимо вспомнить как работает метод charAt(), перечитайте вот эту статью - "charAt() в Java"

И далее мы прописали сам метод int calc(int num1, int num2, int operation):

public static int calc ( int num1 , int num2 , char operation ) < System . out . println ( "Операция не распознана. Повторите ввод." ) ; result = calc ( num1 , num2 , getOperation ( ) ) ; //рекурсия

Как видите, мы использовали конструкцию switch-case. И прописали, что:

  • если пользователь ввел +, тогда num1+num2, то есть суммируем 2 числа, введенных пользователем.
  • если пользователь ввел -, тогда num1-num2, то есть из 1-го числа, введенного пользователем вычитаем 2-е число
  • и т.д.

Если вдруг Вам необходимо вспомнить как работает конструкция switch-case, перечитайте вот эту статью - "Условный оператор if в Java. Оператор switch"

Также обратите внимание, что здесь мы тоже использовали рекурсию. Вот в этих строчках кода:

System . out . println ( "Операция не распознана. Повторите ввод." ) ; result = calc ( num1 , num2 , getOperation ( ) ) ; //рекурсия

И после того как мы прописали все необходимы методы, мы в методе main() прописали следующее:

  • То есть в переменные num1 и num2 будут присвоены, соответственно, 1-е и 2-е число, введенное пользователем.
  • В переменную operation будет присвоена операция, которую ввел пользователь: +, - , * или /
  • Далее в переменную result будет присвоен результат вычислений "нашего калькулятора"
  • И после этого результат будет выведен в консоль

Надеемся - наша статья была Вам полезна. Есть возможность записаться на наши курсы по Java. Детальную информацию смотрите у нас на сайте.

Простой калькулятор
Пожалуйста помогите!)) Нужно написать приложение &quot;Простой калькулятор&quot;. Пользователь вводит строку.


Написать простой калькулятор для чисел BigDecimal
Всем доброго времени суток. Помогите написать простой калькулятор для чисел BigDecimal, в виде.

Простой калькулятор
сделал простой консольный калькулятор, но есть одна проблема, вот код: import.

Простой калькулятор на java не понимаю(
Помогите разобраться с программой что в ней что public class Calculator < private double.

Решение

18, 22, 26 и т.д. ты вызываешь метод scan() раз за разом
scan().equals("*")

scan(). - это ты запускаешь метод заново

Сразу хочу сказать, что на форуме вариантов таких калькуляторов хоть и много, но всё равно для случайных посетителей, как я считаю, этот код может пригодиться. Да и к тому же позднее вопрос на эту тему я не видел, поэтому пока вопрос свежий, можно об этом всём и написать.
В общем: в моей версии есть 4 типа расчётов: алгебраические вычисления, геометрические, физические и банковские. Всё построено на условной конструкции SWITCH: в зависимости от написанного ответа в виде цифр от одного до четырёх главный код запускает нужный метод с нужными операциями. Если честно, все методы можно было бы написать в отдельном классе(классах), но я писал код раньше освоения классов.
Также в главном методе я создал переменную CICLE, которая всегда равна 1, и которая позволяет работать программе циклично, не выходя из неё никогда, не считая того, что я не прописал исключения, ведь после ввода иных символов, программа закроется с ошибкой.
Главный класс называется CV5, т.е. Calculator ver. 5. В ,,меню'' мы имеем 6 вариаций хода программы: -1 - ,,пасхалка", 0 - информация о программе и создателе, 1-4 вид операций.
Каждая переменная, нужная для расчёта, объявлена типом double.
Я про то, что какой-нибудь случайный ,,прохожий" также будет искать разные варианты кода и что-то может взять для себя, к примеру, как я. Я тоже интересовался вариациями кода и было просто интересно посмотреть на что-то иное, не как у меня. Да, в данной теме мой код не актуален. Но в будущем он может кому-то приглянуться. Странно, что ты используешь JDK 14, но притом у тебя в коде старый формат switch Также в главном методе я создал переменную CICLE, которая всегда равна 1, и которая позволяет работать программе циклично, не выходя из неё никогда

Ну чего бы тогда не написать while (2*2==4) ?
Тоже ништяк

Добавлено через 16 минут
DucoExin, а если серьезно - зачем создавать лишнюю переменную, которая ничего не делает кроме того, что сбивает с толку? А ежели код будет не на 10 строчек, то увидев эту переменную в условии придется перекопать тонну кода, чтобы понять - занахренами она там нужна, что она делает, и при каких обстоятельствах изменяется? Если уж тебя прет туда переменную поставить - поставь константу, назвав ее соответствующим образом.

Необходимо написать простой консольный калькулятор на Java.


Решение:

Комментарии к задаче:

Прежде чем решать данную задачу, необходимо разбить задачу на подзадачи. Как видно из картинки ниже, всего есть 3 основных шага:


Поэтому в методе int getInt() мы прописали механику считывания числа с консоли и проверки целочисленное число введено или нет.

Выбор операции (+,-,*,/) мы осуществили с помощью метода char getOperation()

Мы с помощью метода сканера next() считали всю строчку. А далее, поскольку нам не нужна вся строка, а нужен только первый элемент строки, то есть нулевой элемент, поэтому мы вызвали еще и метод charAt(0). И таким образом мы получим только значение 0-го элемента, а не всей строки.

И далее мы прописали сам метод int calc(int num1, int num2, int operation):

Как видите, мы использовали конструкцию switch-case. И прописали, что:

  • если пользователь ввел +, тогда num1+num2, то есть суммируем 2 числа, введенных пользователем.
  • если пользователь ввел -, тогда num1-num2, то есть из 1-го числа, введенного пользователем вычитаем 2-е число
  • и т.д.

Также обратите внимание, что здесь мы тоже использовали рекурсию. Вот в этих строчках кода:

И после того как мы прописали все необходимы методы, мы в методе main() прописали следующее:

Учимся программировать на Java с нуля


Представляю вам готовый калькулятор на Java. Просто скопируйте нижний код и вставьте его в ваш >

Комментариев 31 на “ Простой калькулятор на Java ”

Все можно. Постараюсь на днях сделать уроки специально по ActionListener.

а как добавить кнопку очистки? ну чтобы введенные данные или результат удалялся

0.1 + 0.2=0.300000000004 – и вы это называете калькулятором.

Для начинающих самое оно.

Alex прежде чем возникать посмотрите какого типа result в Java – double имеет такую особенность что при арифметических операциях он некоректно возвращает результат(типу 0.300000000004) если хотите норм результат объявите как BigDecimal и все будет в порядке.

И будет 0, тот еще эксперт я погляжу. Меняется не один параметр и не на BigDecimal, а на float.

Это ж сколько мне еще учится что бы написать хотя бы такой калькулятор.
Может ну ее эту яву?

Ну на сайте найдете много информации.
Посетите рубрику “Java для начинающих”.

Здравствуйте,помогите пожалуйста написать копию калькулятора windos 7, на среде программирования netbeans язык java , с использованием swing.

Подскажите пожалуйста как сделать чтобы внесенные пользователем данные вносились в Базу Данных (н2 )
Получилось только добавлять данные записанные в коде (использовал stmt.execute(“INSERT INTO lesson (nam , code ) VALUES (‘фио’, ‘имя’)” ) ,
а из формы не получается.

Спасибо, за ссылку. Интересный сервис, попробую на нем создать калькулятор.

if(lastCommand.equals(“+”)) result += x;
else if(lastCommand.equals(“-“)) result -= x;
else if(lastCommand.equals(“*”)) result *= x;
else if(lastCommand.equals(“/”)) result /= x;
else if(lastCommand.equals(“=”)) result = x;

Наверно, имеется ввиду, что лучше использовать switch case

switch (lastCommand)
<
case “+”: result +=x; break;
case “-“: result -=x; break;
case “*”: result *=x; break;
case “/”: result /=x; break;
case “=”: result = x; break;

А как этот шрифт называется?

public class Main <
public static void main(String args[]) <
Scanner sc =new Scanner(System.in);
int i =sc.nextInt();
String a = sc.next();
int j =sc.nextInt();
if(a.equals(“/”)) <
System.out.print(i / j);
>
if(a.equals(“*”)) <
System.out.print(i*j);
>
if(a.equals(“-“)) <
System.out.print(i – j);
>
if(a.equals(“+”)) <
System.out.print(i + j);
>

Не знаю, чи правильно але працює

К черту этот джава, ну нафиг, “простой” калькулятор мне такому не научится ну к черту программирование сидел бы в html не высовывался.

Спасибо большоееееее )))))
то что мне надо

Рады вам помочь.

В вашей программе после нажатия кнопки “=” вы не сможете вычесть из результата новое значение.

Поделитесь пожалуйста вашим кодом здесь, в комментариях.

вставьте пожалуйста комментарии в код, у меня несколько другая структура кода, пытаюсь разобраться откуда идут корни того, что есть у вас и нет у меня..

не претендую на гениальность (только учусь) – прошу конструктивной критики! Сделал округление до 2 знаков и кнопку очистки:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Calculator <
public static void main(String[] args) <
EventQueue.invokeLater(new Runnable()
<
public void run() <
CalculatorFrame frame = new CalculatorFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
>
>);
>
>
class CalculatorFrame extends JFrame <
public CalculatorFrame() <
setTitle(“Calculator 2.0”);
CalculatorPanel panel = new CalculatorPanel();
add(panel);
pack();
>
>
class CalculatorPanel extends JPanel <
public CalculatorPanel() <
setLayout(new BorderLayout());

result = 0;
lastCommand = “=”;
start = true;

display = new JButton(“0”);
display.setEnabled(false);
add(display, BorderLayout.NORTH);

ActionListener insert = new InsertAction();
ActionListener command = new CommandAction();

panel = new JPanel();
panel.setLayout(new GridLayout(4, 5));
addButton(“”, command);
addButton(“7”, insert);
addButton(“8”, insert);
addButton(“9”, insert);
addButton(“/”, command);

private void addButton(String label, ActionListener listener) <
JButton button = new JButton(label);
button.addActionListener(listener);
panel.add(button);
>

private class InsertAction implements ActionListener <
public void actionPerformed(ActionEvent event) <
String input = event.getActionCommand();
if (start) <
display.setText(“”);
start = false;
>
display.setText(display.getText() + input);
>
>

private class CommandAction implements ActionListener <
public void actionPerformed(ActionEvent event) <
String command = event.getActionCommand();
if (start) <
if (command.equals(“Cl”)) <
// display.setText(command);
display.setText(“”);
start = false;
> else lastCommand = command;
> else <
calculate(Double.parseDouble(display.getText()));
lastCommand = command;
start = true;
>
>
>

public void calculate(double x) <

switch (lastCommand)
<
case “+”: result=Math.rint((result + x)*100)/100; break;
case “-“: result=Math.rint((result – x)*100)/100; break;
case “*”: result=Math.rint((result * x)*100)/100; break;
case “/”: result=Math.rint((result / x)*100)/100; break;
case “=”: result = x; break;

private JButton display;
private JPanel panel;
private double result;
private String lastCommand;
private boolean start;
>

Очень интересный материал.
Во я полный дурак что не нашел ваш сайт сразу еще год назад, ой дураак.
Спасибо очень! Поклон вам.

всем привет!
нужна помощь в создании калькулятора двоичных чисел
кто может помочь или хотя б подсказать как это делать напишите мне пожалуйста в инстаграме @_olyezha_

как сделать что бы при вводе в консоли:

сразу выдавал ответ а не требовал запуска программы

листинг моего калькулятора.

Обновление

С подсказки @Nofate, вот такой костыль получился в итоге. Единственное в консоли строку надо вводить без пробелов.

1 ответ 1

Массив args в методе main(. ) содержит параметры командной строки, передаваемые программе при запуске.

Читайте также: