калькулятор нескольких значений - PullRequest
0 голосов
/ 21 сентября 2011

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

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

public class SimpleCalculator implements ActionListener
{
    double value1=0,value2=0,result=0;
    static  String command=null;
    int counter=0;

    // containers
    private Frame f;
    private Panel p1, p2, p3, p4,p5,p6;

    // components
    private Label l1, l2, l3;
    static private TextField tf1;
    private Button bAdd, bSub, bMul, bDiv, bClear,b1,b2,b3,b4,b5,b6,b7,b8,b9,b0,bEqual;

     private static void value(String num)
        {
         if((tf1.getText()).equals("0"))
            tf1.setText(num);
          else
            tf1.setText(tf1.getText()+num);
         }
    public SimpleCalculator()
    {
        f = new Frame("My First GUI App");

        p1 = new Panel();
        p2 = new Panel();
        p3 = new Panel();
        p4 = new Panel();
        p5 = new Panel();
        p6 = new Panel();




        tf1 = new TextField(15);

        b1 = new Button("1");
        b2 = new Button("2");
        b3 = new Button("3");
        b4 = new Button("4");   
        b5 = new Button("5");
        b6 = new Button("6");
        b7 = new Button("7");
        b8 = new Button("8");
        b9 = new Button("9");
        b0 = new Button("0");
        bAdd = new Button("+");
        bSub = new Button("-");
        bMul = new Button("*");
        bDiv = new Button("/");
        bClear = new Button("C");
        bEqual = new Button("=");
    }
    public void launchFrame()
    {
        // use default layout manager of the Panel (FlowLayout)
        p1.add(tf1);


        p2.add(b1);
        p2.add(b2);
        p2.add(b3);

        p3.add(b4);
        p3.add(b5);
        p3.add(b6);

        p4.add(b7);
        p4.add(b8);
        p4.add(b9);

        p5.add(b0);

        p6.add(bAdd);
        p6.add(bSub);
        p6.add(bMul);
        p6.add(bDiv);
        p6.add(bClear);
        p6.add(bEqual);


        // change the layout manager of the Frame, 
        // use GridLayout(4, 1)
        f.setLayout(new GridLayout(6, 1));

        f.add(p1);
        f.add(p2);
        f.add(p3);
        f.add(p4);
        f.add(p5);
        f.add(p6);

        f.pack();
        f.setVisible(true);

        // register event handlers
        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);
        b0.addActionListener(this);
        bEqual.addActionListener(this);
        bAdd.addActionListener(this);
        bSub.addActionListener(this);
        bMul.addActionListener(this);
        bDiv.addActionListener(this);
        bClear.addActionListener(this);

        f.addWindowListener(new MyCloseButtonHandler());
    }
    // override the actionPerformed method
    public void actionPerformed(ActionEvent ae)
    {

        Object source = ae.getSource();

            if (source == b1)   
                value("1");
            else if (source == b2)
                value("2");
            else if (source == b3)
                value("3");
            else if (source == b4)
                value("4");
            else if (source == b5)
            value("5");
            else if (source == b6)
            value("6");
            else if (source == b7)
            value("7");
            else if (source == b8)
            value("8");
            else if (source == b9)
            value("9");
            else if (source == b0)
            value("0");
            else if(source== bAdd){
            value1=Double.parseDouble(tf1.getText());
            command="+";
            tf1.setText("");
            }
            else if(source==bSub){

            value1=Double.parseDouble(tf1.getText());
            command="-";
            tf1.setText("");

             }
             else if(source==bDiv){
             value1=Double.parseDouble(tf1.getText());
             command="/";
             tf1.setText("");
             }
             else if(source == bMul){
             value1=Double.parseDouble(tf1.getText());
             command="*";
             tf1.setText("");
             }
             else if(source ==bClear)
             tf1.setText("0");
            else if(source==bEqual){
            value2=Double.parseDouble(tf1.getText());
            if(command.equals("+"))
            result=value1+value2;
            else if(command.equals("-"))
            result=value1-value2;
            else if(command.equals("*"))
            result=value1*value2;
            else if(command.equals("/"))
            result=value1/value2;
            command="=";
            tf1.setText(""+result);
            }   

        }

    private class MyCloseButtonHandler extends WindowAdapter
    {
        public void windowClosing(WindowEvent we)
        {
            System.exit(0);
        }
    }
    public static void main(String args[])
    {
    double value1=0;
        SimpleCalculator sc = new SimpleCalculator();
        sc.launchFrame();
    }
}

Проблема в том, что они не могут выполнять операции непрерывно, например, 1 + 2 + 3, я пытался добавлять значения каждый раз, когда нажимаю операцию, но это выдает неправильный вывод.

Ответы [ 4 ]

1 голос
/ 21 сентября 2011

Я бы использовал встроенный в Java анализатор Javascript для вашего калькулятора.

0 голосов
/ 11 ноября 2011

Как насчет того, чтобы вы отобразили результат первых 2 чисел (т.е. результат, который работает), а затем, когда они попадают в другой операнд, вы ставите value1 = result и value2 следующим числом. Затем, как только они снова равняются, вы получаете 1+2+3. Затем вы можете реализовать кнопку очистки, чтобы установить result = 0.

0 голосов
/ 21 сентября 2011

почему бы не использовать такой инструмент, как jep , чтобы проанализировать выражение, если только это не то, что вам нужно написать вручную (например, проект школы / колледжа) ... в любом случае это не мешает видетьрешение, которое существует.

0 голосов
/ 21 сентября 2011

Вы сохраняете только два значения (значение1 и значение2), таким образом, вы можете выполнять только математику с двумя.Подумайте, как можно хранить больше значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...