• File: CalculatorOneFile.java
  • Full Path: /home/lmnet/fm-site/files/JavaProgramming/JAVAPROGRAMS/Calculator/CalculatorOneFile.java
  • Date Modified: 02/23/2026 3:41 PM
  • File size: 14.99 KB
  • MIME-type: text/x-java
  • Charset: utf-8
 
Open Back
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;

public class CalculatorOneFile{
    String input = "";
    public static void main(String[] args){
        Solve Solve = new Solve();
        CalculatorOneFile obj = new CalculatorOneFile();


        JFrame calc = new JFrame("Calculator");
        JTextArea hello = new JTextArea(1,1);
        calc.add(hello);

        calc.setSize(220, 420);
        calc.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        calc.setLayout(null);
        
        JButton buttonoutput = new JButton(obj.input);
        buttonoutput.setBounds(0, 0, 200, 70);
        calc.add(buttonoutput);

        JButton buttonAC = new JButton("AC");
        buttonAC.setBounds(0, 70, 50, 50);

        JButton buttonparentheses1 = new JButton("(");
        buttonparentheses1.setBounds(50, 70, 38, 50);
        JButton buttonparentheses2 = new JButton(")");
        buttonparentheses2.setBounds(75, 70, 38, 50);

        JButton buttonpercent = new JButton("%");
        buttonpercent.setBounds(100, 70, 50, 50);
        JButton buttondivide = new JButton("/");
        buttondivide.setBounds(150, 70, 50, 50);

        JButton button1 = new JButton("1");
        button1.setBounds(0, 120, 50, 50);
        JButton button2 = new JButton("2");
        button2.setBounds(50, 120, 50, 50);
        JButton button3 = new JButton("3");
        button3.setBounds(100, 120, 50, 50);
        JButton buttonmultiply = new JButton("x");
        buttonmultiply.setBounds(150, 120, 50, 50);

        JButton button4 = new JButton("4");
        button4.setBounds(0, 170, 50, 50);
        JButton button5 = new JButton("5");
        button5.setBounds(50, 170, 50, 50);
        JButton button6 = new JButton("6");
        button6.setBounds(100, 170, 50, 50);
        JButton buttonsubract = new JButton("-");
        buttonsubract.setBounds(150, 170, 50, 50);

        JButton button7 = new JButton("7");
        button7.setBounds(0, 220, 50, 50);
        JButton button8 = new JButton("8");
        button8.setBounds(50, 220, 50, 50);
        JButton button9 = new JButton("9");
        button9.setBounds(100, 220, 50, 50);
        JButton buttonadd = new JButton("+");
        buttonadd.setBounds(150, 220, 50, 50);
        

        JButton button0 = new JButton("0");
        button0.setBounds(0, 270, 50, 50);
        JButton buttondecimalpoint = new JButton(".");
        buttondecimalpoint.setBounds(50, 270, 50, 50);
        JButton buttonbackspace = new JButton("<<");
        buttonbackspace.setBounds(100, 270, 50, 50);
        JButton buttonequals = new JButton("=");
        buttonequals.setBounds(150, 270, 50, 50);


        calc.add(buttonAC);
        buttonAC.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        obj.input = "";
                        buttonoutput.setText(obj.input);
                    }
                });

        calc.add(buttonparentheses1);
        calc.add(buttonparentheses2);
        calc.add(buttonpercent);
        calc.add(buttondivide);
        calc.add(button1);
        calc.add(button2);
        calc.add(button3);
        calc.add(buttonmultiply);
        calc.add(button4);
        calc.add(button5);
        calc.add(button6);
        calc.add(buttonsubract);
        calc.add(button7);
        calc.add(button8);
        calc.add(button9);
        calc.add(buttonadd);

        //Numbers
        button1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                obj.input += "1";
                buttonoutput.setText(obj.input);
            }
        });
        button2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                obj.input += "2";
                buttonoutput.setText(obj.input);
            }
        });
        button3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                obj.input += "3";
                buttonoutput.setText(obj.input);
            }
        });
        button4.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                obj.input += "4";
                buttonoutput.setText(obj.input);
            }
        });
        button5.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                obj.input += "5";
                buttonoutput.setText(obj.input);
            }
        });
        button6.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                obj.input += "6";
                buttonoutput.setText(obj.input);
            }
        });
        button7.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                obj.input += "7";
                buttonoutput.setText(obj.input);
            }
        });
        button8.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                obj.input += "8";
                buttonoutput.setText(obj.input);
            }
        });
        button9.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                obj.input += "9";
                buttonoutput.setText(obj.input);
            }
        });
        button0.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                obj.input += "0";
                buttonoutput.setText(obj.input);
            }
        });

        //Other
        buttondecimalpoint.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                obj.input += ".";
                buttonoutput.setText(obj.input);
            }
        });
        buttonparentheses1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                obj.input += "(";
                buttonoutput.setText(obj.input);
            }
        });
        buttonparentheses2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                obj.input += ")";
                buttonoutput.setText(obj.input);
            }
        });
        buttonpercent.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                obj.input += "%";
                buttonoutput.setText(obj.input);
            }
        });



        //Operators
        buttonadd.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                obj.input += "+";
                buttonoutput.setText(obj.input);
            }
        });
        buttonmultiply.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                obj.input += "x";
                buttonoutput.setText(obj.input);
            }
        });
        buttonsubract.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                obj.input += "-";
                buttonoutput.setText(obj.input);
            }
        });
        buttondivide.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                obj.input += "÷";
                buttonoutput.setText(obj.input);
            }
        });

        calc.add(button0);
        calc.add(buttondecimalpoint);

        //BackSpace
        calc.add(buttonbackspace);
        buttonbackspace.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        obj.input = obj.input.substring(0,obj.input.length()-1);
                        buttonoutput.setText(obj.input);
                    }
                });

        //Equal Button
        calc.add(buttonequals);
        calc.setVisible(true);
        buttonequals.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
        try {
            //MDAS
             String result = "";
            if (!((obj.input.contains("(")) || (obj.input.contains(")")))) {
                //MDAS
               result = Solve.MDAS(obj.input);
               obj.input = result;
               buttonoutput.setText(obj.input);
            }
            else {
                //PEMDAS
               result = Solve.PEMDAS(obj.input);
               obj.input = result;
               buttonoutput.setText(obj.input);
            }

            }catch(NumberFormatException error) {
                buttonoutput.setText("Error");
            }catch(NullPointerException error) {
                buttonoutput.setText("Error");
            }catch(ArrayIndexOutOfBoundsException error) {
                buttonoutput.setText("Error: "+error);
            }catch(Exception error) {
                buttonoutput.setText("Error: "+error);
            }
        }
        });    
    }
}
class Operator {
    String modulo(String a, String b) {
    double a1 = Double.parseDouble(a);
    double b1 = Double.parseDouble(b);
    double equal = a1%b1;
    String stringEqual = Double.toString(equal);
        return stringEqual;
    }
    String add(String a, String b) {
    double a1 = Double.parseDouble(a);
    double b1 = Double.parseDouble(b);
    double equal = a1+b1;
    String stringEqual = Double.toString(equal);
        return stringEqual;
    }
    String subtract(String a, String b) {
    double a1 = Double.parseDouble(a);
    double b1 = Double.parseDouble(b);
    double equal = a1-b1;
    String stringEqual = Double.toString(equal);
        return stringEqual;
    }
    String multiply(String a, String b) {
    double a1 = Double.parseDouble(a);
    double b1 = Double.parseDouble(b);
    double equal = a1*b1;
    String stringEqual = Double.toString(equal);
        return stringEqual;
    }
    String divide(String a, String b) {
    double a1 = Double.parseDouble(a);
    double b1 = Double.parseDouble(b);
    double equal = (a1)/b1;
    String stringEqual = Double.toString(equal);
        return stringEqual;
    }
}
class Solve {
    String[] numArrage(String[] numbers, String operator, int indexIndentify, int i){        
                 for (int change = i + 1; change < indexIndentify; change++) {
                    numbers[change] = numbers[change+1];
                 }
                numbers[indexIndentify] = null;
        return numbers;
    }

    String MDAS(String input){
        Operator Operator = new Operator();

        String expression = input;
            String[] numbers = expression.split("[+\\-x÷%]");

            //Scan Operator
                        String operator = ""; 
            for (int i = 0; i<expression.length(); i++) {
                    if ( expression.charAt(i) == '+' ||
                         expression.charAt(i) == '-' ||
                         expression.charAt(i) == 'x' ||
                         expression.charAt(i) == '%' ||
                         expression.charAt(i) == '÷') {
                            operator += expression.charAt(i);
                         }
                }
            int indexIndentify = numbers.length-1;
            for (int i = 0; i<operator.length(); i++) {
                if (operator.charAt(i) == 'x' || operator.charAt(i) == '÷' || operator.charAt(i) == '%') {
                    //Multiply
                    if (operator.charAt(i) == 'x') {
                        numbers[i] = Operator.multiply(numbers[i], numbers[i+1]);
                        operator = operator.substring(0, i) + operator.substring(i + 1);  
                        numbers = numArrage(numbers, operator, indexIndentify, i);
                        indexIndentify--;
                        i--;
                        //Debug
                        //JOptionPane.showMessageDialog(null, "Operator: "+operator+"\n Numbers: "+Arrays.toString(numbers));
                        continue;
                    }
                    if (operator.charAt(i) == '÷') {
                        numbers[i] = Operator.divide(numbers[i], numbers[i+1]);
                        operator = operator.substring(0, i) + operator.substring(i + 1);  
                        numbers = numArrage(numbers, operator, indexIndentify, i);
                        indexIndentify--;
                        i--;
                        //Debug
                        //JOptionPane.showMessageDialog(null, "Operator: "+operator+"\n Numbers: "+Arrays.toString(numbers));
                        continue;
                    }
                    if (operator.charAt(i) == '%') {
                        numbers[i] = Operator.modulo(numbers[i], numbers[i+1]);
                        operator = operator.substring(0, i) + operator.substring(i + 1);  
                        numbers = numArrage(numbers, operator, indexIndentify, i);
                        indexIndentify--;
                        i--;
                        //Debug
                        //JOptionPane.showMessageDialog(null, "Operator: "+operator+"\n Numbers: "+Arrays.toString(numbers));
                        continue;
                    }  
                 }
            }
            for (int i = 0; i<operator.length(); i++) {
                if (operator.charAt(i) == '+' || operator.charAt(i) == '-') {
                    //Multiply
                    if (operator.charAt(i) == '+') {
                        numbers[i] = Operator.add(numbers[i], numbers[i+1]);
                        operator = operator.substring(0, i) + operator.substring(i + 1);  
                        numbers = numArrage(numbers, operator, indexIndentify, i);
                        indexIndentify--;
                        i--;
                        //Debug
                        //JOptionPane.showMessageDialog(null, "Operator: "+operator+"\n Numbers: "+Arrays.toString(numbers));
                        continue;
                    }
                    if (operator.charAt(i) == '-') {
                        numbers[i] = Operator.subtract(numbers[i], numbers[i+1]);
                        operator = operator.substring(0, i) + operator.substring(i + 1);  
                        numbers = numArrage(numbers, operator, indexIndentify, i);
                        indexIndentify--;
                        i--;
                        //Debug
                        //JOptionPane.showMessageDialog(null, "Operator: "+operator+"\n Numbers: "+Arrays.toString(numbers));
                        continue;
                    }
            }
            }
            return numbers[0];
    }
    String PEMDAS(String input){
        return "Parenthesis Not Yet Supported";
    }
}