评论

收藏

[Java] Java实现简单计算器小程序

编程语言 编程语言 发布于:2021-10-17 14:32 | 阅读数:516 | 评论:0

这篇文章主要为大家详细介绍了Java实现简单计算器小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了Java实现简单计算器小程序的具体代码,供大家参考,具体内容如下
这学期没事学了一点点Java,想写个程序练手,因为只学了一点点,所以暂时只能先写个实现简单功能的计算器练练。
由于期末来了,没太多时间,所以暂时就实现最简单的功能。
个人不喜欢用大量文字记叙程序,而且该程序也相对简单,所以直接画了张程序框架图,再配合代码的注释,就明白程序的原理了。
DSC0000.jpg

图 计算器程序框架
代码如下:
package tst.jframe;
 
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.Font;
import javax.swing.SwingConstants;
 
public class javaAP {
 
 /**
  * 各控件对象的建立
  * 
  * */
 private JFrame frame;
 private JTextField result;
 private JButton button_1;
 private JButton button_2;
 private JButton button_3;
 private JButton button_4;
 private JButton button_5;
 private JButton button_6;
 private JButton button_7;
 private JButton button_8;
 private JButton button_9;
 private JButton button_0;
 private JButton Button_equal;
 private JButton button_dot;
 private JButton button_d0;
 private JButton button_plus;
 private JButton button_sub;
 private JButton button_clr;
 private JButton button_dlt;
 private JButton button_mul;
 private JButton button_div;
 
 /**
  * 几个变量,用于计算、判定,存放结构等。
  * */
 private boolean numflag = false;   //用于标识是否输入数字
 private boolean opflag = false;   //用于标识是否输入运算操作符
 private String txt = null;  //显示结果的文本框的文本内容,用于存放计算结果的字符串形式
 private String num_txt = "";   //每次输入一个数,以字符的形式加到该字符创变量,后面运算直接将该字符创转成double类型进行运算
 private String op = " ";  //存放输入的运算操作符
 private double num1 = 0;  //num1和num2用作运算 
 private double num2 = 0;
 
 
 /**
  * Launch the application.
  */
 public static void main(String[] args) {
  EventQueue.invokeLater(new Runnable() {
   public void run() {
  try {
   javaAP window = new javaAP();
   window.frame.setVisible(true);
  } catch (Exception e) {
   e.printStackTrace();
  }
   }
  });
 }
 
 /**
  * 调用控件初始化函数,创建程序。
  */
 public javaAP() {
  initialize();
 }
 
 
 /**
  * 初始化计算器的各个控件。
  */
 private void initialize() {
  frame = new JFrame();                   //-----------------------------------------------
  frame.setResizable(false);    //
  frame.setBounds(100, 100, 371, 371);   // 窗口各个属性的初始化
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //
  frame.getContentPane().setLayout(null);   //-----------------------------------------------
  
  result = new JTextField();    //-----------------------------------------------
  result.setFont(new Font("Lao UI", Font.BOLD, 15));  //
  result.setHorizontalAlignment(SwingConstants.RIGHT);  //
  result.setBounds(29, 28, 308, 50);    //  显示结果的文本框的各个属性的初始化
  frame.getContentPane().add(result);    //
  result.setColumns(10);     //
  result.setText(txt);     //-----------------------------------------------
  
  
  /**
   * 0-9, 小数点,00 各个控件的初始化,给每个控件添加动作监听事件,每个控件被按下则调用numBtnAction函数。
   * 
   * */
  
  button_0 = new JButton("0");
  button_0.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
  numBtnAction("0");
   }
  });
  button_0.setBounds(99, 273, 50, 50);
  frame.getContentPane().add(button_0);
  
  button_1 = new JButton("1");
  button_1.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
   numBtnAction("1");
   }
  });
  button_1.setBounds(99, 213, 50, 50);
  frame.getContentPane().add(button_1);
  
  button_2 = new JButton("2");
  button_2.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
   numBtnAction("2");
   }
  });
  button_2.setBounds(159, 213, 50, 50);
  frame.getContentPane().add(button_2);
  
  button_3 = new JButton("3");
  button_3.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
  numBtnAction("3");
   }
  });
  button_3.setBounds(219, 213, 50, 50);
  frame.getContentPane().add(button_3);
  
  button_4 = new JButton("4");
  button_4.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
  numBtnAction("4");
   }
  });
  button_4.setBounds(99, 157, 50, 50);
  frame.getContentPane().add(button_4);
  
  button_5 = new JButton("5");
  button_5.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
  numBtnAction("5");
   }
  });
  button_5.setBounds(159, 157, 50, 50);
  frame.getContentPane().add(button_5);
  
  button_6 = new JButton("6");
  button_6.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
  numBtnAction("6");
   }
  });
  button_6.setBounds(219, 157, 50, 50);
  frame.getContentPane().add(button_6);
  
  button_7 = new JButton("7");
  button_7.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
  numBtnAction("7");
   }
  });
  button_7.setBounds(99, 97, 50, 50);
  frame.getContentPane().add(button_7);
  
  button_8 = new JButton("8");
  button_8.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
  numBtnAction("8");
   }
  });
  button_8.setBounds(159, 97, 50, 50);
  frame.getContentPane().add(button_8);
  
  button_9 = new JButton("9");
  button_9.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
  numBtnAction("9");
   }
  });
  button_9.setBounds(219, 97, 50, 50);
  frame.getContentPane().add(button_9);
  
  button_dot = new JButton(".");
  button_dot.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
  numBtnAction(".");
   }
  });
  button_dot.setFont(new Font("宋体", Font.BOLD, 15));
  button_dot.setBounds(159, 273, 50, 50);
  frame.getContentPane().add(button_dot);
  
  button_d0 = new JButton("00");
  button_d0.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
  numBtnAction("00");
   }
  });
  button_d0.setBounds(219, 273, 50, 50);
  frame.getContentPane().add(button_d0);
  
  /**
   * 运算符  =,+,-,*,/ 的初始化。
   * */
  
  Button_equal = new JButton("=");
  Button_equal.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
  if(opflag == true){
   num2 = Double.parseDouble(num_txt);  //如果此时opflag为true的话,证明已经输入运算符,这时候刚输入的数为另外一个操作数,所以赋给num2。
   calc(op);     //num1和num2进行运算。
  }
  result.setText(new Double(num1).toString());   //显示结果。
   }
  });
  Button_equal.setBounds(279, 213, 50, 110);
  frame.getContentPane().add(Button_equal);
  
  button_plus = new JButton("+");
  button_plus.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
  opBtnAction("+");
   }
  });
  button_plus.setBounds(279, 97, 50, 50);
  frame.getContentPane().add(button_plus);
  
  button_sub = new JButton("-");
  button_sub.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
  opBtnAction("-");
   }
  });
  button_sub.setBounds(279, 157, 50, 50);
  frame.getContentPane().add(button_sub);
  
  button_mul = new JButton("*");
  button_mul.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
  opBtnAction("*");
   }
  });
  button_mul.setBounds(39, 157, 50, 50);
  frame.getContentPane().add(button_mul);
  
  button_div = new JButton("/");
  button_div.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
  opBtnAction("/");
   }
  });
  button_div.setBounds(39, 97, 50, 50);
  frame.getContentPane().add(button_div);
  
  /**
   * 功能键clr:清空   和  dlt回删   两个按键的初始化。
   * 
   * */
  
  button_clr = new JButton("clr");
  button_clr.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
  result.setText(null);    //清楚文本框和num_txt,num1和num2全部置为0,
  txt = null;      //numflag和opflag均置为false,全部置为程序开始的默认值。
  numflag = opflag = false;
  num1 = num2 = 0;
  num_txt = "";
   }
  });
  button_clr.setBounds(39, 273, 50, 50);
  frame.getContentPane().add(button_clr);
  
  button_dlt = new JButton("dlt");
  button_dlt.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
  if(num_txt != "" && num_txt.length() > 0) {
   num_txt = num_txt.substring(0, num_txt.length() - 1);  //通过截取字符串的方式回删一个字符
  }
  if(txt != null && txt.length() > 0) {
   txt = result.getText().substring(0,txt.length() - 1);  //结果文本框的回删
   result.setText(txt);
  }
   }
  });
  button_dlt.setBounds(39, 213, 50, 50);
  frame.getContentPane().add(button_dlt);
   
 }
 
 /**
  * 每个数字按键按下后触发的功能。
  * 
  * @param num 传入字符串形式的数字
  * 
  * */
 private void numBtnAction(String num) { 
  if(num_txt == "" && opflag == false) {  //判断是否num_txt是否为空,opflag是否为false,若满足这两个
   result.setText(null);    //条件,则为一次运算完毕,切新运算不以该次结果继续做运算。
   num_txt = "";
  } 
  numflag = true;     //只要输入一个数,则把numflag置为true,表示已有数字输入
  num_txt += num;     //把输入的数加入到最终要转换成都double运算的字符串
  txt = result.getText() + num;   //加到txt,使输入的数显示到文本框中。
  result.setText(txt);
  
 }
 
 /**
  * 点下运算符键触发的动作
  * 
  * @param operator 点击的运算符
  * 
  * */
 private void opBtnAction(String operator) {
  
 
  if(opflag == false && num_txt != "") {   //进行判断,如果opflag为false,则表示还没输入运算符,     
   num1 = Double.parseDouble(num_txt);   //这个时候把num_txt转换成double赋给num1。
  }
  if(opflag == true && num_txt != ""){
   num2 = Double.parseDouble(num_txt);   //如果opflag为true,表示第一个数输入完毕,且已输入相应的运算符,这个时候是在输入第二个要参与运算的数,则加到num2
   calc(op);     //先计算两数结果,赋给num1,num2置为0,以便后面多层混合运算使用。
  }
  numflag = false;    //numflag置为0,表示当前需要输入数进行运算
  op = operator;     //把新输入的运算符赋给op
  result.setText(operator + " ");   //在文本框显示
  opflag = true;     //opflag置为true,表示当前已输入一个或多个操作数。
  num_txt = "";     //num_txt置为空,为了存储下一个操作数。
 }
 
 /**
  * 进行  +、-、*、/ 的运算
  * @param op 运算符 
  * 
  * */
 private void calc(String op) {
  switch(op){
  case "+" : 
     num1 = num1 + num2;
     num2 = 0;
     opflag = false;
     num_txt = "";
     break;
     
  case "-" :
     num1 = num1 - num2;
     num2 = 0;
     opflag = false;
     num_txt = "";
     break;
     
  case "*" :
   if(num2 != 0) {
    num1 = num1 * num2;
    num2 = 0;
    opflag = false;
    num_txt = "";
   }
   break;
   
  case "/" : 
   if(num2 != 0) {
    num1 = num1 / num2;
    num2 = 0;
    opflag = false;
    num_txt = "";
   } 
   break;
   
  default:   opflag = false;
     num_txt = "";
     break;
  }
 }
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持CodeAE代码之家
原文链接:https://blog.csdn.net/hquCTH/article/details/9131873

关注下面的标签,发现更多相似文章