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
- java计算器
- Java计算器
- 计算器java
- java计算器
- java计算器
- Java计算器
- 计算器(JAVA)
- 计算器 java
- 计算器 java
- java计算器..
- java计算器
- java 计算器
- Java 计算器
- java计算器
- java计算器
- Java-计算器
- java 计算器
- java计算器
- Xcode使用介绍之五:初识UI控件
- WOJ 1578 Fishing Dream(莫队算法)
- java获取一个字符串在另一个字符串中出现的次数
- Unity网络状态:Application.internetReachability是否可行
- poj 3356 AGTC 简单dp
- JAVA----计算器
- 记一次Weblogic连接池泄露的修复过程
- 极大似然估计,最大后验概率估计(MAP),贝叶斯估计
- html伪类选择器
- 0026-redis服务安装
- 闹钟的本地推送
- leetcode 101. Symmetric Tree
- linux 基础
- PHP中使用递归函数