阿萌的程序小屋

萌物控重度患者与您一起畅游技术与梦想的世界

简单的java计算器 实现了重复标点及运算符连点限制

今天练习了一个简约的java计算器的实现,特此阿萌分享代码给大家,本计算器代码也许有冗余,但是达到的限制效果还是比较完好的。

1

程序的实现还是比较简单的,而且代码也比较乱,想到那写到哪,但是对于作为练习的一个例子,还是有参考价值的,尤其是至少做到了还不错的规格限制,例如:

限制了不能重复输入多个逗号,以及运算符的连点限制,与此同时也保证了正常的连续运算。

下面贴出代码,因为包含着界面,代码量还是可以的:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class Calculator  extends JFrame implements ActionListener{
    JPanel jp=new JPanel(new GridLayout(5,4,4,3));
    JTextField jt=new JTextField();
    public Calculator(){
        super("Calculator简易计算器");
        setSize(260,240);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
        getContentPane().add(jt,BorderLayout.NORTH);
        getContentPane().add(jp,BorderLayout.CENTER);
        jt.setHorizontalAlignment(JTextField.RIGHT);
        jt.setBackground(new Color(240,240,240));
        jt.setText("0");
        String btnStr[]={"sqrt","+/-","Back","C","7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"};
        JButton b[]=new JButton[btnStr.length];
        for(int i=0;i<btnStr.length;i++){
            b[i]=new JButton(btnStr[i]);
            jp.add(b[i]);
            b[i].addActionListener(this);
        }
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }
    public static void main(String args[]){
        new Calculator();
    }
    int first=1;
    String jisuan,oldJisuan;
    double a=0;
    public void actionPerformed(ActionEvent e) {
        String str=e.getActionCommand().trim();
        if(str=="C"){
            a=0;
            jt.setText("0.");
            first=1;
        }else if(str=="Back"){
            jt.setText(jt.getText().substring(0,jt.getText().length()-1));
        }else if(str=="+/-"){
            if(jt.getText().charAt(0)=='-'){
                jt.setText(jt.getText().substring(1,jt.getText().length()));
            }else{
                jt.setText("-"+jt.getText());
            }
        }else if(str=="sqrt"){
            a=Double.parseDouble(jt.getText());
            a=Math.sqrt(a);
            jt.setText(String.valueOf(a));
        }else if("0123456789.".indexOf(str)!=-1){
            if(str=="."&&jt.getText().indexOf(".")!=-1){
                
            }else if(first==1){
                jt.setText(str);
                first=0;
            }else{
                jt.setText(jt.getText()+str);
            }
        }else if("+-*/=".indexOf(str)!=-1&&str!=jisuan){
            oldJisuan=jisuan;
            jisuan=str;
            first=1;
            if(a!=0){
                if(jisuan!="="){
                    jisuan(jisuan);
                }else{
                    jisuan(oldJisuan);
                }
                jt.setText(String.valueOf(a));
            }else{
                a=Double.parseDouble(jt.getText());
            }
        }
    }
    public void jisuan(String s){
        switch(s){
            case "+":
                a+=Double.parseDouble(jt.getText());
                break;
            case "-":
                a-=Double.parseDouble(jt.getText());
                break;
            case "*":
                a*=Double.parseDouble(jt.getText());
                break;
            case "/":
                a/=Double.parseDouble(jt.getText());
                break;
        }
    }
}

因为我接触的面相对象编程实例不多,如有网友大大能给我一些宝贵的意见,那么感激不敬。

如有朋友感觉我的博文或代码有问题,愿能给予我宝贵的意见!Thanks

另注:转载请随意,但请带上本文地址,万分感谢。

http://www.wangmengyu.cn/?p=796

这就是真的真的是传说中的公告牌的说~~
暂且努力发展中~~

性别:男  年龄:20岁
现居:江苏  南京  浦口区
标语:萌即是一切