Моделирование работы калькулятора на Java

Автор: content Понедельник, Апрель 9th, 2012 Нет комментариев

Рубрика: Язык Java

Целью данной статьи является описание работы простейшего калькулятора на языке Java. Задача состоит в построении модели простейшего калькулятора на Java, выполняющего операции сложения, умножения, вычитания и деления.
Проект разработан в JBuider. Среда OpenTools, доступная в JBuilder, создана на Java и имеет много функций, например, может зарегистрировать новую запись в меню, новый тип файла, новый вьювер, искать email в web и многое другое. Как правило, OpenTools использует методы, являющиеся частью JBuilder’s OpenTools API (Application Programming Interface) интерфейса программирования приложений.

Проект super.jpx состоит из двух файлов:

основного файла soop.java содержащего код самой программы;
файла soop.html – в котором производится вызов апплета, а также описываются его параметры.

code     = «supe.soop.class»
name     = «TestApplet»
width    = «400″
height   = «300″

В java — файле soop.java производится импортирование стандартных пакетов java.awt.*; java.awt.event.*; java.applet.*, а также вводится класс soop, декларированный как public.

import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class soop extends Applet implements ActionListener{
}

Класс soop является наследником класса Applet, о чем говорит строка объявления soop extends Applet. Класс soop также связан с интерфейсом ActionListener который позволяет нам обрабатывать события происходящие с объектами Button.

Каждый апплет должен быть проинициализирован это делается следующим образом

public void init(){
}

Далее приводятся описания переменных и массивов, используемых в программе.

Определяются и объявляются переменная num, означающая первое число, переменная buf, означающая второе число, переменная code, означающая код операции, строковая переменная str, а также переменная point, означающая наличие или отсутствие десятичной точки.

Определяется массив из 17 элементов Button but[]. Создание объекта класса происходит при помощи констуктора new:

But = new Button[17].

Далее создается панель для размещения кнопок

Panel pn = new Panel(new GridLayout(5,4,2,2));

Кнопки располагаются по четыре в четыре ряда, одна кнопка располагается в пятом ряду, поэтому GridLayout имеет разметы 5*4, каждая кнопка размером 2*2.

Создание кнопки происходит следующим образом: cначала с помощью конструктора new создается объект класса Button but[i], где i изменяется от 0 до 16.

but[0]=new Button(«0″);

Далее созданный при помощи конструктора new объект класса Button присоединяется к интерфейсу ActionListener, который в данном случае работает как метод с аргументом this.

but[0].addActionListener(this);

Далее происходит добавление объекта but[0] к панели.

pn.add(but[0]);

Аналогичные действия производятся с остальными элементами массива Button but[i], где i изменяется от 0 до 16.

Затем работает метод add(pn), добавляющий панель к пользовательскому интерфейсу. Аргументом метода add(pn) является созданная панель кнопок pn.

add(pn);

Далее работает метод paint(Graphics gr) с аргументом gr типа Graphics. Этот метод рисует строку размером 10*15 с помощью метода drawString.

public void paint(Graphics gr){
gr.drawString(str,10,15);
}

Далее работает метод actionPerformed(ActionEvent e) с аргументом e типа ActionEvent.

Метод actionPerformed( ) связан с интерфейсом ActionListener.

public void actionPerformed(ActionEvent e){
}

Метод actionPerformed( ) осуществляет операции, связанные с кнопками.

Переменная num определяет первое число, с которым производятся действия. Это число есть объект класса Float, создаваемый с помощью конструктора new

num=new Float(str).floatValue();

Переменная num есть число с плавающей точкой. Метод floatValue() переводит аргумент, находящийся в скобках — строковую переменную, в число с плавающей точкой.

Следующие строки Java – кода показывают, как обрабатываются объекты класса Button – элементы массива but[i], где i изменяется от 0 до 16, при нажатии на соответствующую кнопку. Метод e.getSource() означает нажатие на кнопку, оператор if(e.getSource() и идущая далее в этой же строке операция логического сравнения == означает проверку, на какую кнопку производится нажатие.

if(e.getSource()==but[0])zero();
if(e.getSource()==but[1])chislo(«1″);
if(e.getSource()==but[2])chislo(«2″);
if(e.getSource()==but[3])chislo(«3″);
if(e.getSource()==but[4])chislo(«4″);
if(e.getSource()==but[5])chislo(«5″);
if(e.getSource()==but[6])chislo(«6″);
if(e.getSource()==but[7])chislo(«7″);
if(e.getSource()==but[8])chislo(«8″);
if(e.getSource()==but[9])chislo(«9″);

Далее происходит проверка, не является ли кнопка, на которую производится нажатие, кодом операций вычитания (1), сложения (2), умножения (*), деления (/).

if(e.getSource()==but[10]){code=1;buf=num;str=»0″;}// -1
if(e.getSource()==but[11]){code=2;buf=num;str=»0″;}// +2
if(e.getSource()==but[14]){code=3;buf=num;str=»0″;}// *3
if(e.getSource()==but[15]){code=4;buf=num;str=»0″;}// /4

Далее производится проверка, не является ли кнопка, на которую производится нажатие, десятичной точкой, операций сброса, оператора равно.

if(e.getSource()==but[12])pnt();
if(e.getSource()==but[16])sbros();
if(e.getSource()==but[13])result();

На этом метод actionPerformed( ) завершает свою работу.

Далее работает метод result(), в котором выполняются операции вычитания, сложения, умножения и деления. При этом производится проверка num!=0 для избежания ситуации деления на ноль.

private void result(){
num=new Float(str).floatValue();
if(code==1)num=buf-num;
if(code==2)num=buf+num;
if(code==3)num=buf*num;
if(code==4 && num!=0)num=buf/num;
else str=»delenie na nol — nelzya»;

Далее производится перевод полученного при вычислениях значения переменной num из числа с плавающей точкой в строковую переменную с помощью метода valueOf(num) с аргументом num:

str=str.valueOf(num);

Метод repaint() снова прорисовывает полученную строковую переменную.

repaint();

На этом метод result() завершает свою работу.

Метод sbros() выполняет функции сброса, то есть прорисовывает нуль на месте предыдущей строковой переменной:

private void sbros(){
num=0;
buf=0;
code=0;
str=»0″;
point=false;
repaint();
}

Метод zero() работает с ненулевой строкой. Если строка не является нулевой (str!=»0″), то к строковой переменной str добавляется строковая константа «0″. Полученная строка снова прорисовывается с помощью метода repaint().

private void zero(){
if(str!=»0″)str=str+»0″;
repaint();
}

Метод chislo() работает с нулевой строкой. Если строка является нулевой (str==»0″), то к строковой переменной str добавляется строковая переменная s. Полученная строка снова прорисовывается с помощью метода repaint().

private void chislo(String s){
if(str==»0″)str=s;
else str=str+s;
repaint();
}

Метод pnt() работает с десятичной точкой. Если строка не содержит десятичной точки (point == false), то к строковой переменной str добавляется строковая десятичная точка «.». Логической переменной point присваивается значение true. Полученная строка снова прорисовывается с помощью метода repaint().

private void pnt(){
if(point == false)str=str+».»;
point=true;
repaint();
}
Источник: http://www.javaportal.ru/java/articles/calc_model.html
Автор: О.М.Масловская

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты