Написал калькулятор на swing, не работает приоритет операций - Java

Узнай цену своей работы

Формулировка задачи:

Вот код. Проблема в следующем: например 2+2*2 он считает как 8, а не 6. Не могу написать алгоритм, что бы он учитывал приоритет операций.
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class mycalculator {
    JPanel WindowContent;
 
    JFormattedTextField displayFiled;
 
    JButton button[] = new JButton[10];
 
    JButton buttonPoint;
    JButton buttonEqual;
    JButton buttonPlus;
    JButton buttonMinus;
    JButton buttonDel;
    JButton buttonUmnog;
    JButton buttonC;
    JButton buttonBackspase;
 
    JButton buttonPercent;
    JButton buttonQuert;
 
    JPanel p1;
    JPanel p2;
    mycalculator(){
        WindowContent = new JPanel();
 
        BorderLayout b1 = new BorderLayout();
        WindowContent.setLayout(b1);
 
        displayFiled = new JFormattedTextField();
        displayFiled.setHorizontalAlignment(SwingConstants.RIGHT);
        WindowContent.add("North",displayFiled);
 
        for (int i = 0; i <10 ; i++) {
            button[i] = new JButton(""+ i);
        }
 
        buttonPoint = new JButton(".");
        buttonEqual = new JButton("=");
        buttonPlus = new JButton("+");
        buttonMinus = new JButton("-");
        buttonDel = new JButton("/");
        buttonUmnog = new JButton("*");
        buttonC = new JButton("C");
        buttonBackspase = new JButton("Backspase");
        buttonPercent= new JButton("%");
        buttonQuert= new JButton("$");

        p1 = new JPanel();
        GridLayout g1 = new GridLayout(4,3);
        p1.setLayout(g1);
        p2 = new JPanel();
        GridLayout g2 = new GridLayout(4,2);
        p2.setLayout(g2);

        for (int i = 0; i <10 ; i++) {
            p1.add(button[i]);
        }
 
        p1.add(buttonPoint);
        p1.add(buttonEqual);
 
        WindowContent.add("Center", p1);
 
        p2.add(buttonC);
        p2.add(buttonBackspase);
        p2.add(buttonPercent);
        p2.add(buttonQuert);
        p2.add(buttonPlus);
        p2.add(buttonMinus);
        p2.add(buttonDel);
        p2.add(buttonUmnog);
        WindowContent.add("East", p2);
        JFrame frame = new JFrame("Calculator");
 
        frame.setContentPane(WindowContent);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.pack();
        frame.setResizable(false);

        CalculatorEngine calcEngine = new CalculatorEngine();
        for (int i = 0; i <10 ; i++) {
            button[i].addActionListener(calcEngine);
        }
        buttonPoint.addActionListener(calcEngine);
        buttonEqual.addActionListener(calcEngine);
        buttonPlus.addActionListener(calcEngine);
        buttonMinus.addActionListener(calcEngine);
        buttonDel.addActionListener(calcEngine);
        buttonUmnog.addActionListener(calcEngine);
        buttonC.addActionListener(calcEngine);
        buttonBackspase.addActionListener(calcEngine);
        buttonPercent.addActionListener(calcEngine);
        buttonQuert.addActionListener(calcEngine);
 
    }
    public class CalculatorEngine implements ActionListener {
        private double a, b, res;
        int flag = 0,count = 0, point = 0;
        public void actionPerformed(ActionEvent e){
            String str;
            String s = displayFiled.getText();
            for (int i = 0; i <10 ; i++) {
                if(e.getSource() == button[i]){
                    displayFiled.setText(displayFiled.getText() + i);
                }
            }
            if(e.getSource() == buttonPoint){
                if((s.length() > 0)&&(point == 0)) {
                    displayFiled.setText(displayFiled.getText() + "." );
                    point++;
                }
                else if(point == 0){
                    displayFiled.setText(displayFiled.getText() + 0 + "." );
                    point++;
                }
 
            }
 
            if(s.length() > 0) {
 
                if(e.getSource() == buttonPlus){
                    point = 0;
                    flag = 1;
                    if(count > 0){
                        b = Double.valueOf(displayFiled.getText());
                        displayFiled.setText("");
                        a += b;
                    }
                    else{
                        a = Double.valueOf(displayFiled.getText());
                        displayFiled.setText("");
                        count++;
                    }
 
                }
                if(e.getSource() == buttonMinus){
                    point = 0;
                    flag = 2;
                    if(count > 0){
                        b = Double.valueOf(displayFiled.getText());
                        displayFiled.setText("");
                        a -= b;
                    }
                    else{
                        a = Double.valueOf(displayFiled.getText());
                        displayFiled.setText("");
                        count++;
                    }
                }
                if(e.getSource() == buttonDel){
                    point = 0;
                    flag = 3;
                    if(count > 0){
                        b = Double.valueOf(displayFiled.getText());
                        displayFiled.setText("");
                        a /= b;
                    }
                    else{
                        a = Double.valueOf(displayFiled.getText());
                        displayFiled.setText("");
                        count++;
                    }
                }
                if(e.getSource() == buttonUmnog){
                    point = 0;
                    flag = 4;
                    if(count > 0){
                        b = Double.valueOf(displayFiled.getText());
                        displayFiled.setText("");
                        a *= b;
                    }
                    else{
                        a = Double.valueOf(displayFiled.getText());
                        displayFiled.setText("");
                        count++;
                    }
                }
                if(e.getSource() == buttonPercent){
                    point = 0;
                    flag = 5;
                    a = Double.valueOf(displayFiled.getText());
                    displayFiled.setText("");
                }
                if(e.getSource() == buttonQuert){
                    point = 0;
                    a = Double.valueOf(displayFiled.getText());
                    displayFiled.setText("");
                    displayFiled.setText(displayFiled.getText() + Math.sqrt(a));
                }
 
                if(e.getSource() == buttonC){
                    point = 0;
                    displayFiled.setText("");
                }
 
                if(e.getSource() == buttonBackspase){
                    str = displayFiled.getText();
                    displayFiled.setText("");
                    displayFiled.setText(displayFiled.getText() + str.substring(0,str.length()- 1) );
                }
                if(e.getSource() == buttonEqual){
                    point = 0;
                    b = Double.valueOf(displayFiled.getText());
                    displayFiled.setText("");
                    switch(flag){
                        case 1:
                            res = a + b;
                            break;
                        case 2:
                            res = a - b;
                            break;
                        case 3:
                            res = a / b;
                            break;
                        case 4:
                            res = a * b;
                            break;
                        case 5:
                            res = (a / 100) * b;
                            break;
                        default:
                            System.out.println("Hui!");
                    }
                    displayFiled.setText(displayFiled.getText() + res);
                    a = 0;
                    b = 0;
                    count = 0;
                    res = 0;
                }
            }

        }
    }

    public static void main (String[] args){
        mycalculator cal = new mycalculator();
    }
}

Решение задачи: «Написал калькулятор на swing, не работает приоритет операций»

textual
Листинг программы
  ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
    
String expression = "6*3+8/2-2.3";
 
    try {
        float result = Float.valueOf(engine.eval(expression).toString());
        System.out.println(result);
    } catch (ScriptException e) {
        e.printStackTrace();
    } catch (NumberFormatException e) {
        e.printStatckTrace();
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5