[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Программирование под ОС / 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 /

Особенности Java 5
23-02-2010   

Java 5 обладает некоторыми полезными возможностями. В данной статье мы рассмотрим их и узнаем, как можно извлечь из них выгоду. В этой части мы рассмотрим auto-boxing foreach... подробнее

Кол. просмотров: общее - 5508 сегодня - 0

Особенности Java 5. Часть 2
23-02-2010   

В первой части мы обсудили новые возможности Java 5 относительно функции auto-boxing и цикла foreach. В данной части мы обсудим поддержку функций с переменным числом аргументов и статическое импортирование (static import). Поскольку другие функции, такие как enum, annotation, и generics, заслуживают отдельной статьи, мы их не будет демонстрировать в данной... подробнее

Кол. просмотров: общее - 4620 сегодня - 0

Расширение функциональности элементов пользовательского интерфейса в Java
05-05-2009   

Довольно часто при создании приложений с GUI (stand alone приложений или апплетов) приходится сталкиваться с необходимостью несколько изменить внешний вид и поведение стандартных компонентов пользовательского интерфейса... подробнее

Кол. просмотров: общее - 4870 сегодня - 0

Введение в сервлеты
05-05-2009   

Что такое сервлет ? Это класс порожденный от класса HttpServlet с переопреденными методами doGet и doPost (управление приходит в один из этих методов в зависимости от того какого типа был запрос. Надеюсь у Вас есть некоторый опыт в cgi-программировании... подробнее

Кол. просмотров: общее - 4691 сегодня - 0

Java Server Pages
05-05-2009   

Технология Java Server Pages (JSP) является составной частью единой технологии создания бизнес-приложений J2EE. JSP - это альтернативная методика разработки приложений... подробнее

Кол. просмотров: общее - 4600 сегодня - 0



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects