JAVA----计算器

来源:互联网 发布:windows 10家庭版关闭 编辑:程序博客网 时间:2024/06/15 11:27

前言

学习了 JAVA 的 Swing 编程,不由得兴趣做了一个计算器,其中也参考了网上的一些例子,再加上自己的一些想法,花了大概半天的时间总算做出来了,总体来说,写计算器的逻辑还是让人受益匪浅的。

由于在代码中我大部分做了注释,在这里就不多说了

package calcutor;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;/** * 计算器 * @author Mr.W * @version 1.0 *///声明:没有按到等于号的运算称为连续运算 class CalculatorTest implements ActionListener{         JFrame f = new JFrame("计算器");     JTextField tf = new JTextField();     Press press = null;    //初始化窗口,构建计算器界面    public void init()    {     JPanel p1 = new JPanel();//此面板放置文本框和清除按钮     Container ct = f.getContentPane();     //文本框的处理     tf.setPreferredSize(new Dimension(195,50));//设置文本框的理想大小     tf.setHorizontalAlignment(JTextField.RIGHT);//设置文本的水平右对齐     p1.add(tf);     //清除按钮     JButton C = new JButton("CE");     C.addActionListener(this);     C.setPreferredSize(new Dimension(69,50));     p1.add(C);     //将画板放置在最上面,北面     ct.add(p1,"North");     JPanel p2 = new JPanel();       ct.add(p2,"Center");     GridLayout c = new GridLayout(5,4); //网格布局                p2.setLayout(c);      //按钮的字符     String[] str ={                    "sqrt","^","1/x","+/-",                    "1", "2", "3", "+",                     "4", "5", "6", "-" ,                     "7", "8", "9", "x" ,                      ".", "0", "=", "/"             };     //循环添加按钮到网格布局的面板中,并设置按钮监听器     for(int i=0 ; i<str.length ; i++){         JButton b = new JButton(str[i]);         p2.add(b);         b.addActionListener(this);     }        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口即关闭程序        f.setSize(290,282);        f.setVisible(true);//窗口可见    }public CalculatorTest(){     press = new Press(tf);      //其中v只存放四则运算操作,v2是存放所有操作}public void actionPerformed(ActionEvent e){    //获取上次的文本框内容,也就是sum的值        String str=tf.getText();         //获得按到的键        String er = e.getActionCommand();        switch (er) {        case "+":            press.Pressplus(str);//加法            break;        case "-":            press.PressCut(str);//减法            break;        case "x":            press.PressMu(str);//乘法            break;        case "/":            press.PressExc(str);//除法            break;        case "=":            press.Pressequal(str);            break;        case "1/x":            press.PressDown(str);            break;        case "^":            press.Presspow(str);            break;        case "sqrt":            press.Presssqrt(str);            break;        case "CE":            press.PressCE();            break;        case "+/-":            press.Pressagain(str);            break;        default:            press.PressNum(er, str);            break;        }       }public static void main(String args[])    {        try {            //界面风格            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");        } catch (Exception e) {            e.printStackTrace();        }       new CalculatorTest().init();            }}  
package calcutor;import java.util.Vector;import javax.swing.JTextField;public class Press {    private double sum=0;//用于盛放计算结果    private double mark = 0;//盛放幂数    private JTextField tf = null;    private Vector<String> v=new Vector(1,1);//存放运算符操作    private Vector<String> v2=new Vector(1,1);//存放所有操作    public Press(JTextField tf){        this.tf = tf;        v2.addElement(new String("init"));//addElement添加到末尾且自动加1,默认未按键存放init          v.addElement(new String("init"));    }    /*     * 按下等于号     */    public void Pressequal(String str) {             common(str);            v.addElement(new String("="));            v2.addElement(new String("="));                 }    /*     * 按下数字键     */    public void PressNum(String e,String str){//      if (e.equals("1") ||                       //              e.equals("2") ||//              e.equals("3") ||//              e.equals("4") ||//              e.equals("5") ||//              e.equals("6") ||//              e.equals("7") ||//              e.equals("8") ||//              e.equals("9") ||//              e.equals("0") ||//              e.equals(".")           //             )                              //1,2,3,4,5,6,7,8,9,0,.的实现;//          {                   if(                  //第一次是按数字或者在四则运算之后按数字,注意这里不包括数字前面是等于号                  ("+").equals((String)v2.lastElement()) ||                   ("-").equals((String)v2.lastElement()) ||                   ("x").equals((String)v2.lastElement()) ||                   ("/").equals((String)v2.lastElement()) ||                   ("init").equals((String)v2.lastElement())||                   ("sqrt").equals((String)v2.lastElement()) ||                   ("1/x").equals((String)v2.lastElement()) ||                   ("+/-").equals((String)v2.lastElement()) ||                   ("CE").equals((String)v2.lastElement())                )              {                            tf.setText(e.toString());              }              else if(("^").equals((String)v2.lastElement())){                  tf.setText(e.toString());                 mark = Double.parseDouble(tf.getText());              }            //按了等于号后置sum为0重新开始新的计算            else if (("=").equals((String)v2.lastElement()))                 {                  sum=0;                  tf.setText(e.toString());//显示按下的数字                 }            //连续按下数字则连成字符串显示出来              else               {                   tf.setText(tf.getText()+e.toString());//调用其父类中的getText()方法                   mark = Double.parseDouble(tf.getText());                }                v2.addElement(new String(e.toString()));//将数字添加到向量中         // }       }    /**     * 除法键     */    public void PressExc(String str) {                  common(str);              v.addElement(new String("/"));              v2.addElement(new String("/"));                  }    /*     * 按下.     *///  public void Presspoint(String str){//      if((".").equals((String)v2.lastElement()//              )//  }    /**     * 公共方法     * @param str     */    public void common(String str){        //getActionCommand返回与此命令相关的字符串        if(           /**            * 用户按了俩次运算符,包括上次的等于号,                       也就是用户不进行连续运算时,则显示原来的数,                       开机第一次按键   或者  第二次以后按键运算符没有连续此条件不走                      例如6++            */           //lastELement指向最后一个元素        ("+").equals((String)v2.lastElement()) ||         ("-").equals((String)v2.lastElement()) ||         ("x").equals((String)v2.lastElement()) ||         ("/").equals((String)v2.lastElement()) ||         ("=").equals((String)v2.lastElement()) ||         ("sqrt").equals((String)v2.lastElement()) ||         ("1/x").equals((String)v2.lastElement()) ||         ("^").equals((String)v2.lastElement()) ||         ("+/-").equals((String)v2.lastElement())      )        {            tf.setText(String.valueOf(sum));        }        /**        * 当第一次按键是+时,也只有开机第一次才会执行此语句        */        else if(("init").equals((String)v2.lastElement()))        {            tf.setText(String.valueOf(sum));//显示初始化的值        }            /**            * 用户进行连续运算时            * 或者            * 第一次按+键时            * (不是开机的第一次,开机的第一次按+键走上面的语句初始化文本框为0)            * 例如 0+ 而不是+0            */            else            {                double d=Double.parseDouble(str);                /*************!!!注意:这里不是第一次相加***************/                //距离上次按+没有出现其他的三种运算即 X,/,-,可理解为连加                if (("+").equals((String)v.lastElement()))                {                                sum=sum+d;                        tf.setText(String.valueOf(sum));                }                    //距离上次按-没有出现其他的三种运算即 X,/,+,可理解为 先减后加                    else if (("-").equals((String)v.lastElement()))                    {                        //System.out.println("我连续按了俩次运算咯");                        sum=sum-d;                        tf.setText(String.valueOf(sum));                    }                    //距离上次按x没有出现其他的三种运算即 +,/,-,可理解为  先乘后加                    else if(("x").equals((String)v.lastElement()))                    {                      sum=sum*d;                      tf.setText(String.valueOf(sum));                    }                    //距离上次按/没有出现其他的三种运算即 X,+,-,可理解为   先除后加                    else if(("/").equals((String)v.lastElement()))                    {                              sum=sum/d;                             tf.setText(String.valueOf(sum));                    }                    else if(("^").equals((String)v.lastElement()))                    {                        Presspow();                    }                    else                    {                                                    sum=sum+d;                             tf.setText(String.valueOf(sum));                     }                     }    }    /*     * 按下1/x     */    public void PressDown(String str){             common(str);             sum = 1.0/sum ;             tf.setText(String.valueOf(sum));            v.addElement(new String("1/x"));            v2.addElement(new String("1/x"));                  }    /*     * 按下x号     */    public void PressMu(String str) {             common(str);            v.addElement(new String("x"));            v2.addElement(new String("x"));                  }    /*     * 按下sqrt     */    public void Presssqrt(String str){            common(str);            //System.out.println(sum);            sum = Math.sqrt(sum);            tf.setText(String.valueOf(sum));            v.addElement(new String("sqrt"));            v2.addElement(new String("sqrt"));     }    /*     * 按下^号     */    public void Presspow(String str){            common(str);//先获得sum的值            v.addElement(new String("^"));            v2.addElement(new String("^"));    }    public void Presspow(){        //System.out.println(sum+"sum=====mark"+mark);        sum = Math.pow(sum, mark);        tf.setText(String.valueOf(sum));    }    /**     * 按下加号键     */    public void Pressplus(String str){        common(str);       //将分别按键添加到俩个向量去,        v.addElement(new String("+"));        v2.addElement(new String("+"));                  }    /*     * 按下减号     */    public void PressCut(String str){             common(str);            v.addElement(new String("-"));            v2.addElement(new String("-"));                  }    /**     * 按下清除键     */    public void PressCE(){            //按下了清除键就什么都没啦                sum = 0;                 tf.setText("0.0");                 v.addElement(new String("CE"));                 v2.addElement(new String("CE"));    }    /*     * 按下+/-号     */    public void Pressagain(String str){            common(str);            sum =  -1.0*sum;            tf.setText(String.valueOf(sum));            v.addElement(new String("+/-"));            v2.addElement(new String("+/-"));    }}

下面是程序运行结果哦
这里写图片描述

最近有点忙可能更新博客的速度会慢了一点,但还是会继续坚持下去的,希望每天都能进步一点点~~~

0 0
原创粉丝点击