Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2010, 10:50   #1
KirkMETAL
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 12
Вопрос Калькулятор(Java). Проблема вычислительных кнопок с "продолжением" действия.

Здравствуйте!
Есть проблема с калькулятором. Изначально, калькулятор работал по следующему принципу: ввод числа, клавиша действия, ввод числа, "=". Если необходимо продолжить работу с данным числом, то необходимо сделать следующее: клавиша действия, ввод числа, "=".
Но мне сказали, что нужно сделать его нормальным, т.е. по принципу: ввел число, действие, число и если нажать после это не "=", а клавишу действия, то он просчитает предыдущую операцию, и будет добавлят следующие действия. Ну в общем стандартное поведение калькулятора.
Но что-то я кручу-верчу, счетчиков накидал, сейчас число действует только само на себя, т.е. 3*3=9, 3+3=6, а если 3*6=36
Просто на Delphi я с калькулятором справился, ориентируясь на этот код и исправляя, попытался перенести на Java, но что-то где-то не вижу и не пойму, где же проблема.
Код:
...
double num;
double buf;
int code;
int r;
double m;
int n;
Button b1 = new Button("7");
Button b2 = new Button("8");
Button b3 = new Button("9");
Button b4 = new Button("*");
Button b5 = new Button("4");
Button b6 = new Button("5");
Button b7 = new Button("6");
Button b8 = new Button("-");
Button b9 = new Button("1");
Button b10 = new Button("2");
Button b11 = new Button("3");
Button b12 = new Button("sqrt");
Button b13 = new Button("0");
Button b14 = new Button("C");
Button b15 = new Button("=");
Button b16 = new Button("exit");
Label l = new Label("0",Label.RIGHT);
    CalcL6(String S){
        super(S);
        num=0;
        buf=0;
        code=0;
        n=0;
        r=0;
        m=0;
        Panel p1=new Panel(new GridLayout(2,1,5,5));
        Panel p=new Panel(new GridLayout(4,4,1,1));     
        p.add(b1);
        p.add(b2);
        p.add(b3);
        p.add(b4);
        p.add(b5);
        p.add(b6);
        p.add(b7);
        p.add(b8);
        p.add(b9);
        p.add(b10);
        p.add(b11);
        p.add(b12);
        p.add(b13);
        p.add(b14);
        p.add(b15);
        p.add(b16);
        b1.addActionListener(this);
        b2.addActionListener(this);
        b3.addActionListener(this);
        b4.addActionListener(this);
        b5.addActionListener(this);
        b6.addActionListener(this);
        b7.addActionListener(this);
        b8.addActionListener(this);
        b9.addActionListener(this);
        b10.addActionListener(this);
        b11.addActionListener(this);
        b12.addActionListener(this);
        b13.addActionListener(this);
        b14.addActionListener(this);
        b15.addActionListener(this);
        b16.addActionListener(this);
        add(p1);
        p1.add(l);
        p1.add(p); 
        setSize(300,300);
        setVisible(true);
    }

 public void actionPerformed(ActionEvent e){
     num=new Double(l.getText()).doubleValue();
     if (e.getActionCommand().equals("0")){chislo("0");}
     if (e.getActionCommand().equals("1")){chislo("1");}
     if (e.getActionCommand().equals("2")){chislo("2");}
     if (e.getActionCommand().equals("3")){chislo("3");}
     if (e.getActionCommand().equals("4")){chislo("4");}
     if (e.getActionCommand().equals("5")){chislo("5");}
     if (e.getActionCommand().equals("6")){chislo("6");}
     if (e.getActionCommand().equals("7")){chislo("7");}
     if (e.getActionCommand().equals("8")){chislo("8");}
     if (e.getActionCommand().equals("9")){chislo("9");}
     if (e.getActionCommand().equals("*")){actclick(1);}
     if (e.getActionCommand().equals("-")){actclick(2);}
     if (e.getActionCommand().equals("sqrt")){koren();}
     if (e.getActionCommand().equals("C")){sbros();}
     if (e.getActionCommand().equals("=")){actclick(3);}
     if (e.getActionCommand().equals("exit")){System.exit(0);}
 }
 private void actclick(int k){
     buf=num;
     if (r==0) {n=k;} 
     else result();
     n=k;
     r=0;
 }
 
 private void result(){
    num=new Double(l.getText()).doubleValue();
    if(n==1)num=buf*num;
    if(n==2)num=buf-num;
    if(n==3)num=buf;
    if ((num-(long)num)!=0) {l.setText(num+"");}
    else l.setText((long)num+"");
  }

  private void sbros(){
    r=0;
    m=0;
    l.setText("0");
  }

  private void koren(){
    num=new Double(l.getText()).doubleValue();
    num=Math.sqrt(num);
    if ((num-(long)num)!=0) {l.setText(num+"");}
    else l.setText((long)num+"");
    r=0;
  }
   private void chislo(String s){
    if (s!="0") {
        if (r==0) {l.setText(s);r=1;}
        else {
            if (l.getText().contains(".")==true) {l.setText("");l.setText(l.getText()+s);}
            else l.setText(l.getText()+s);
        }
    }
    if (s=="0") { 
        if (l.getText()!="0") {
         if (r==0) {
         l.setText(s);
         r=1;
         }
         else l.setText(l.getText()+s);   
        }
    }
  }
  
...
KirkMETAL вне форума Ответить с цитированием
Старый 05.06.2010, 17:55   #2
KirkMETAL
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 12
По умолчанию

Вот вроде и сам решил.
Код:
...
public void actionPerformed(ActionEvent e){
     num=new Double(l.getText()).doubleValue();
     if (e.getActionCommand().equals("0")){chislo("0");}
     if (e.getActionCommand().equals("1")){chislo("1");}
     if (e.getActionCommand().equals("2")){chislo("2");}
     if (e.getActionCommand().equals("3")){chislo("3");}
     if (e.getActionCommand().equals("4")){chislo("4");}
...
Строчка num=new Double(l.getText()).doubleValue(); - была лишней. На данный момент, вроде бы, считает так, как надо.
KirkMETAL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Правда ли что Java "Тяжелая" и все "вешает" ? webmaster-n Общие вопросы по Java, Java SE, Kotlin 10 30.07.2009 01:22
Предопределить действия "Диспетчера задач" Air Общие вопросы Delphi 1 01.03.2008 08:44