Логин:   Пароль:




Новости
Рассылки
Форум
Поиск


Java
- Апплеты
- Вопрос-ответ
- Классы
- Примеры
- Руководства
- Статьи
- IDE
- Словарь терминов
- Скачать

Мобильная Java
- Игры
- Примеры
- Статьи
- WAP, WML и пр.

JavaScript
- Вопрос-ответ
- Примеры
- Статьи

Веб-мастеринг
- HTML
- CSS
- SSI

Разминка для ума
Проекты
Книги
Ссылки
Программы
Юмор :)




Rambler's Top100

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

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

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

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

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

  1. основного файла soop.java содержащего код самой программы;
  2. файла 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();
  }

Исходные коды.

Автор: О.М.Масловская



Дэвид Флэнаган
"Java. Справочник"
Подробнее>>
Заказать>>


Е. Буткевич
"Пишем программы и игры для сотовых телефонов"
Подробнее>>
Заказать>>

Узнай о чем ты на самом деле сейчас думаешь тут.


[an error occurred while processing this directive]



Apache Struts 2.0.11
Apache MyFaces Trinidad Core 1.2.3.
Sun переводит мобильные устройства с Java ME на Java SE
Хакерская атака!