java语言的简单计算器

大二突然兴起学了一段时间java。基础差,且没能坚持不懈,只学到了一写入门知识(其实还并没有入门,框架这些基础的都没学)。经过一个多月的边玩边学,终于学到了GUI界面的编写。想起之前课设需要做一个计算器(那时候找大神同学要代码,并不会写),于是想自己写一个计算器出来。也算是java学习写出的第一个看上去比较像东西的东西。

其实相隔现在已经快一年了,看了很多博文,感觉自己写代码就像玩一样,就想学各位大牛一样,开始写博文记录一下自己编程的历程,ps:这是我的第一篇博文。

———-正文———-

毕竟是第一个作品,必然很low(也许大一的看了都要鄙视我了,也许高中生就会了,知乎看到过高中生会的东西我现在都一脸懵逼),只能实现+、-、*、/以及取余5个功能。且一次只能进行一个符号运算。不多说,先上个界面看看实现的功能吧。

这里写图片描述

开始代码说明吧

//导入必要的包文件
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;



public class FrameDemo {

    //几个GUI界面要用的对象创建
    JFrame frame=new JFrame("easyCaculator");//计算器的标题
    JPanel jPanel=new JPanel();//容器
    JLabel display=new JLabel("0.0");//初始值显示
    Panel panel=new Panel();
    StringBuilder j=new StringBuilder();//创建一个StringBuilder 对象来存储内容
    Container container=new Container();//创建对象,放在方法外,可以被所有方法调用。

    public void visibleWindow(){


        //屏幕大小监测
        Toolkit toolkit=Toolkit.getDefaultToolkit();
        Dimension screenSize=toolkit.getScreenSize();
        int screenHeight=screenSize.height;
        int screenWidth=screenSize.width;

        //显示窗口
        frame.setSize(300, 200);
        frame.setVisible(true);
        frame.setLocation(screenWidth/4,screenHeight/4);

        //添加窗口关闭事件
        frame.addWindowListener(new WindowAdapter(){
            public void windowclosing(WindowEvent e) {
                System.out.println("窗口关闭");
                System.exit(0);
            }
        });


        jPanel.setLayout(new FlowLayout());//设置流式布局
        jPanel.setFont(new Font("Helvetica", Font.PLAIN, 14));//设置字体

        frame.add(display,BorderLayout.NORTH);//添加边界布局
        container.add(jPanel);
        frame.add(jPanel);

        //添加按钮
        jPanel.setLayout(new GridLayout(0, 4));//布局,每列四个,0表示行没有限制
        delete("刪除");
        restoration("复位");
        myButton("+");
        myButton("-");
        myButton("1");
        myButton("2");
        myButton("3");
        myButton("*");
        myButton("4");
        myButton("5");
        myButton("6");
        myButton("/");
        myButton("7");
        myButton("8");
        myButton("9");
        myButton("%");
        quite("退出");
        myButton("0");
        myButton(".");
        equal("=");



    }

    //定义Mybutton方法,也就是把按钮中的内容添加到j中
    public void myButton(final String i){
        try {
            JButton button=new JButton(i);
            button.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                        //append(),toString()方法
                        display.setText(j.append(i).toString());//显示出来
                    }
                });;
            jPanel.add(button);
            frame.add(jPanel);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        }

    //复位功能,清空j中的内容
    public void restoration(String i) {
        try {
            JButton button=new JButton(i);
            button.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    j=new StringBuilder();
                    display.setText("0.0");
                }
            });
            jPanel.add(button);
            frame.add(jPanel);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }   

    //删除功能
    public void delete(String i) {
        try {
            JButton button=new JButton (i);
            button.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    if(j!=null&&j.length()!=0){//new出来的j的值为null,清空后的j的长度为0。特殊情况
                    j.deleteCharAt(j.length()-1);//从0开始,所以要-1
                    if(j.length()==0)//为0的时候
                        display.setText("0.0");
                    else
                        display.setText(j.toString());
                    }
                    else
                        display.setText("0.0");
                }
            });
            jPanel.add(button);
            frame.add(jPanel);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    //退出功能
    public void quite(String i) {
        try {
            JButton button=new JButton(i);
            button.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    System.exit(0);//结束程序
                }
            });
            jPanel.add(button);
            frame.add(jPanel);  
        } catch (Exception e) {

        }
    }

    //等号功能,核心功能
    public void equal(String i) {
        try {
            JButton button=new JButton(i);
            button.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    if(j.toString().matches("[-]?\\d+[\\.\\d]?\\d*[+*%/-]\\d+[\\.\\d]?\\d*")){//正则表达式
                        int temp;//定义一个变量,方便记录i的值
                        for(int i=1;i<j.toString().length();i++){
                            //逐个字符比较,知道找到运算符为止,然后将符号两边的字符认为是需要进行运算的数字,
                            //进行运算,下同
                            if(j.toString().charAt(i)=='+'){
                                temp=i;
                                double a=Double.parseDouble(j.toString().substring(0, i));
                                double b=Double.parseDouble(j.toString().substring(i+1, j.length()));
                                j=new StringBuilder();
                                j.append(a+b);//运算并把值赋给j,显示出来
                                display.setText(j.toString());
                            }
                            else if(j.toString().charAt(i)=='-'){
                                temp=i;
                                double a=Double.parseDouble(j.toString().substring(0, i));
                                double b=Double.parseDouble(j.toString().substring(i+1, j.length()));
                                j=new StringBuilder();
                                j.append(a-b);
                                display.setText(j.toString());
                            }
                            else if(j.toString().charAt(i)=='*'){
                                temp=i;
                                double a=Double.parseDouble(j.toString().substring(0, i));
                                double b=Double.parseDouble(j.toString().substring(i+1, j.length()));
                                j=new StringBuilder();
                                j.append(a*b);
                                display.setText(j.toString());
                            }

                            else if(j.toString().charAt(i)=='/'){
                                temp=i;
                                double a=Double.parseDouble(j.toString().substring(0, i));
                                double b=Double.parseDouble(j.toString().substring(i+1, j.length()));
                                if(b==0)//除数为0的情况
                                    display.setText("error");
                                else{
                                j=new StringBuilder();
                                j.append(a/b);
                                display.setText(j.toString());
                                }
                            }

                            else if(j.toString().charAt(i)=='%'){
                                temp=i;
                                double a=Double.parseDouble(j.toString().substring(0, i));
                                double b=Double.parseDouble(j.toString().substring(i+1, j.length()));
                                j=new StringBuilder();
                                j.append(a%b);
                                display.setText(j.toString());
                            }
                        }
                    }
                    else ;          
                }
            });
            jPanel.add(button);
            frame.add(jPanel);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

//main函数
public class Caculator {
    public static void main(String[] args) {
        FrameDemo s1=new FrameDemo();
        s1.visibleWindow();
    }
}

ps:代码实现功能有限,已经把我遇到的bug都解决了,但不敢说一定没有bug,且代码的质量高不高我也不知道。

以上是实现功能的代码。建工程,然后new两个class文件分别把两段代码放在里面就好了。本次运行代码是在myeclipse2015上运行的。但是其实最开始这些代码是大概一年前在eclipse上写的,而且jdk版本也发生了变化,从eclipse到myeclipse确实有一些兼容上的问题,不过都解决了,也不难,自行百度就好了。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lsjweiyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值