java实现简易整数计算器

用java实现的简单整数计算器

##em…这个又是老师布置的作业,话不多说,直接上图片和代码!
在这里插入图片描述

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class Java_494_9 extends JFrame {
    private JPanel jPanel1,jPanel2;
    private JTextField field;
    private JButton btns[] = new JButton[16];
    private String names[] = {"7","8","9","/","4","5","6","*","1","2","3","-","0","C","=","+"};
    private String str = new String();
    private char op[][] = {
            {'>','>','<','<'},
            {'>','>','<','<'},
            {'>','>','>','>'},
            {'>','>','>','>'}
    };
    public Java_494_9(){
        super("Calculator");
        Container container = getContentPane();
        container.setLayout(new BorderLayout());
        field = new JTextField(25);
        jPanel1 = new JPanel();
        jPanel2 = new JPanel();
        jPanel1.setLayout(new BorderLayout(1,1));
        jPanel1.add(field);
        jPanel2.setLayout(new GridLayout(4,4));
        for (int i = 0; i < 16; i++) {
            btns[i] = new JButton(names[i]);
            int finalI = i;
            if (i!=13&&i!=14) {
                btns[i].addMouseListener(new MouseAdapter() {
                    @Override
                    public void mouseClicked(MouseEvent e) {
                        str += names[finalI];
                        field.setText(str);
                    }
                });
            }
            else if (i==13){
                btns[i].addMouseListener(new MouseAdapter() {
                    @Override
                    public void mouseClicked(MouseEvent e) {
                        str = "";
                        field.setText(str);
                    }
                });
            }
            else if (i==14){
                btns[i].addMouseListener(new MouseAdapter() {
                    @Override
                    public void mouseClicked(MouseEvent e) {
                        char input[] = str.toCharArray();
                        int i = 0;
                        sequenceStack<Character> OPTR = new sequenceStack<Character>();
                        sequenceStack<Integer> OPND = new sequenceStack<Integer>();
                        while (i<input.length){
                            if (!isOperator(input[i])){
                                int num;
                                num = input[i]-'0';
                                i++;
                                while (i<input.length&&!isOperator(input[i])){
                                    num=num*10+input[i]-'0';
                                    i++;
                                }

                                OPND.push(num);
                                if (i==input.length){
                                    i--;
                                    input[i] = '+';
                                }
                            }
                            else {
                                if (OPTR.getHead()==null){
                                    OPTR.push(input[i]);
                                    i++;
                                }
                                else {
                                    int opIndex_head = getOpIndex(OPTR.getHead());
                                    int opIndex_current = getOpIndex(input[i]);
                                    char flag = op[opIndex_head][opIndex_current];
                                    int a,b;
                                    char c;
                                    switch (flag){
                                        case '<':OPTR.push(input[i]);
                                                i++;
                                                break;
                                        case '>': c = OPTR.pop();
                                                  b = OPND.pop();
                                                  a = OPND.pop();
                                                  OPND.push(Operate(a,b,c));
                                                  break;
                                    }

                                }
                            }
                        }
                        int result = OPND.getHead();
                        str = ""+result;
                        field.setText(str);
                    }
                });
            }
            jPanel2.add(btns[i]);
        }
        container.add(jPanel1,BorderLayout.NORTH);
        container.add(jPanel2);
        setSize(300,300);
        setVisible(true);
    }
    public boolean isOperator(char c){
        switch (c){
            case '+':return true;
            case '-':return true;
            case '*':return true;
            case '/':return true;
            default:return false;
        }
    }
    public int getOpIndex(char c){
        int flag = 1;
        switch (c){
            case '+':flag = 0;break;
            case '-':flag = 1;break;
            case '*':flag = 2;break;
            case '/':flag = 3;break;
        }
        return flag;
    }
    public int Operate(int a,int b,char c){
        int result = 0;
        switch (c){
            case '+':result = a+b;break;
            case '-':result = a-b;break;
            case '*':result = a*b;break;
            case '/':result = a/b;break;
        }
        return result;
    }

    public static void main(String[] args) {
        Java_494_9 java_494_9 = new Java_494_9();
        java_494_9.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

其中用到了栈结构,下面附上sequenceStack类的代码:

public class sequenceStack<T> {
    final int MaxSize = 10;
    private int top;
    private T[] stackArray;
    public sequenceStack(){
        top = -1;
        stackArray = (T[]) new Object[MaxSize];
    }
    public sequenceStack(int n){
        top = -1;
        if (n<=0){
            System.exit(1);
        }
        stackArray = (T[]) new Object[n];
    }
    public void push(T t){
        if (top<=stackArray.length-1){
            top++;
            stackArray[top] = t;
        }
    }
    public T pop(){
        if (top==-1){            
            return null;
        }
        else {
            return stackArray[top--];
        }
    }
    public T getHead(){
        if (top==-1){
            return null;
        }
        return stackArray[top];
    }
    public boolean isEmpty(){
        return top==-1;
    }
    public int size(){
        return top+1;
    }
    public void nextOrder(){
        for (int i = top; i <=0 ; i--) {
            System.out.println(stackArray[i]);
        }
    }
    public void  clear(){
        top=-1;
    }

}

大家一起努力哦~~

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值