其实这玩意儿是我之前写的东西了。今天写android的卡在了sin,cos的处理上。。。实在无聊便更了一下。
首先声明一下,这是我学java写的第一个东西(准确是2.0版本),所以比较简陋。大家凑合凑合。
之后,这个版本功能很少,仅仅支持一些小的操作,就和那种十块钱一个的计算器功能差不多。不支持括号,括号版本请见我下个安卓计算器。代码中加了大量注释,大家应该看得懂。有任何不懂得,欢迎留言~(虽然从来没有过= =)
最后GUI和数据处理我写在了一起,这个并不推荐,会感觉代码比较乱,且不适合找bug。。。
贴两张截图
/** 简单计算器 * 注意事项:1.目前仅做到小数点后八位的输入(输出不止) * 2.MOD功能仅限整数。 * 3.如需使用根号功能,请先打根号再打数据,如根号3的值需要键入 “3” “根号” * 4.纠错目前没做,数据不支持删除功能。 * 5.如遇到任何bug,欢迎指正。 * Time:2018/5/5 * **/ package jisuan; import java.awt.*; import java.awt.event.*; import javax.lang.model.type.PrimitiveType; import javax.swing.*; import java.awt.Dimension; import java.math.*; import java.nio.file.attribute.FileOwnerAttributeView; public class mine extends JFrame implements ActionListener { int f = 0, fd = 0; double a = 0, b = 0; double t = 10.0; JPanel pan1 = new JPanel(); JPanel pan2 = new JPanel(new GridLayout(5, 5, 8, 8)); JTextField tf = new JTextField(); // private MyPanel1 qq; JButton bu0 = new JButton("0"); //定义设置按钮 JButton bu1 = new JButton("1"); JButton bu2 = new JButton("2"); JButton bu3 = new JButton("3"); JButton bu4 = new JButton("4"); JButton bu5 = new JButton("5"); JButton bu6 = new JButton("6"); JButton bu7 = new JButton("7"); JButton bu8 = new JButton("8"); JButton bu9 = new JButton("9"); JButton bu_jia = new JButton("+"); JButton bu_jian = new JButton("-"); JButton bu_cheng = new JButton("x"); JButton bu_chu = new JButton("/"); JButton bu_cifang = new JButton("次方"); JButton bu_dengyu = new JButton("="); JButton bu_MOD = new JButton("MOD"); JButton bu_root = new JButton("√"); JButton bu_dian = new JButton("."); JButton bu_clean = new JButton("clean"); JButton bu_sin = new JButton("sin"); JButton bu_cos = new JButton("cos"); JButton bu_tan = new JButton("tan"); JButton bu_lg = new JButton("lg"); JButton bu_pi = new JButton("π"); public mine() { /* * MyPanel1 qq=new MyPanel1(); this.addKeyListener(qq); */ tf.setEditable(false); bu0.setActionCommand("0"); bu1.setActionCommand("1"); bu2.setActionCommand("2"); bu3.setActionCommand("3"); bu4.setActionCommand("4"); bu5.setActionCommand("5"); bu6.setActionCommand("6"); bu7.setActionCommand("7"); bu8.setActionCommand("8"); bu9.setActionCommand("9"); bu_jia.setActionCommand("+"); bu_jian.setActionCommand("-"); bu_cheng.setActionCommand("x"); bu_chu.setActionCommand("/"); bu_cifang.setActionCommand("次方"); bu_dengyu.setActionCommand("="); bu_MOD.setActionCommand("MOD"); bu_root.setActionCommand("root"); bu_dian.setActionCommand("."); bu_clean.setActionCommand("clean"); bu_sin.setActionCommand("sin"); bu_cos.setActionCommand("cos"); bu_tan.setActionCommand("tan"); bu_lg.setActionCommand("lg"); bu_pi.setActionCommand("π"); bu0.addActionListener(this); bu1.addActionListener(this); bu2.addActionListener(this); bu3.addActionListener(this); //加监听 bu4.addActionListener(this); bu5.addActionListener(this); bu6.addActionListener(this); bu7.addActionListener(this); bu8.addActionListener(this); bu9.addActionListener(this); bu_jia.addActionListener(this); bu_jian.addActionListener(this); bu_cheng.addActionListener(this); bu_chu.addActionListener(this); bu_cifang.addActionListener(this); bu_dengyu.addActionListener(this); bu_MOD.addActionListener(this); bu_root.addActionListener(this); bu_dian.addActionListener(this); bu_clean.addActionListener(this); bu_sin.addActionListener(this); bu_cos.addActionListener(this); bu_tan.addActionListener(this); bu_lg.addActionListener(this); bu_pi.addActionListener(this); tf.setPreferredSize(new Dimension(465, 40)); tf.setFont(new Font("宋体", Font.PLAIN, 28)); Font f = new Font("仿宋", Font.BOLD, 25);// 根据指定字体名称、样式和磅值大小,创建一个新 Font。 Font F = new Font("仿宋", Font.BOLD, 31); Font ff = new Font("仿宋", Font.BOLD, 21); bu0.setFont(f); bu1.setFont(f); bu2.setFont(f); bu3.setFont(f); bu4.setFont(f); bu5.setFont(f); bu6.setFont(f); bu7.setFont(f); bu8.setFont(f); //做样式,就是为了好看。 bu9.setFont(f); bu0.setFont(f); bu_jia.setFont(f); bu_jian.setFont(f); bu_cheng.setFont(f); bu_chu.setFont(f); bu_root.setFont(f); bu_MOD.setFont(f); bu_clean.setFont(ff); bu_dengyu.setFont(f); bu_dian.setFont(f); bu_cifang.setFont(ff); bu_sin.setFont(f); bu_cos.setFont(f); bu_tan.setFont(f); bu_lg.setFont(f); bu_pi.setFont(F); // pan1.add(tf); this.add(pan1, BorderLayout.NORTH); pan2.add(bu_sin); pan2.add(bu_root); pan2.add(bu_MOD); pan2.add(bu_clean); pan2.add(bu_jia); pan2.add(bu_cos); //这儿是网格布局,这里就是按照顺序加入按钮 pan2.add(bu1); pan2.add(bu2); pan2.add(bu3); pan2.add(bu_jian); pan2.add(bu_tan); pan2.add(bu4); pan2.add(bu5); pan2.add(bu6); pan2.add(bu_cheng); pan2.add(bu_lg); pan2.add(bu7); pan2.add(bu8); pan2.add(bu9); pan2.add(bu_chu); pan2.add(bu_pi); pan2.add(bu_cifang); pan2.add(bu0); pan2.add(bu_dian); pan2.add(bu_dengyu); this.setTitle("王俊谦最帅!"); // 王俊谦是我室友。哈哈哈哈` this.add(pan2, BorderLayout.CENTER); this.setSize(500, 350); this.setLocationRelativeTo(null); // 居中 this.setVisible(true); this.setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } @Override public void actionPerformed(ActionEvent e) { //操作处理 if (e.getActionCommand().equals("1")) { opt(1); } else if (e.getActionCommand().equals("2")) { opt(2); } else if (e.getActionCommand().equals("3")) { opt(3); } else if (e.getActionCommand().equals("4")) { opt(4); } else if (e.getActionCommand().equals("5")) { opt(5); } else if (e.getActionCommand().equals("6")) { opt(6); } else if (e.getActionCommand().equals("7")) { opt(7); } else if (e.getActionCommand().equals("8")) { opt(8); } else if (e.getActionCommand().equals("9")) { opt(9); } else if (e.getActionCommand().equals("0")) { opt(0); } else if (e.getActionCommand().equals("+")) { this.f = 1; tf.setText(""); fd = 0; this.t = 10.0; } else if (e.getActionCommand().equals("-")) { this.f = 2; tf.setText(""); fd = 0; this.t = 10.0; } else if (e.getActionCommand().equals("x")) { this.f = 3; tf.setText(""); fd = 0; this.t = 10.0; } else if (e.getActionCommand().equals("/")) { this.f = 4; tf.setText(""); fd = 0; this.t = 10.0; } else if (e.getActionCommand().equals("MOD")) { this.f = 5; tf.setText(""); // fd=0; } else if (e.getActionCommand().equals("次方")) { this.f = 6; tf.setText(""); fd = 0; this.t = 10.0; } else if (e.getActionCommand().equals("=")) { calcu(this.a, this.b, this.f); // this.a = 0; this.b = 0; this.f = 0; this.t = 10; fd = 0; } else if (e.getActionCommand().equals("clean")) { tf.setText(""); this.a = 0; this.b = 0; this.f = 0; t = 10; fd = 0; } else if (e.getActionCommand().equals("root")) { this.a = Math.sqrt(this.a); tf.setText(String.valueOf(a)); } else if (e.getActionCommand().equals("sin")) { this.a = Math.sin(this.a); tf.setText(String.valueOf(a)); } else if (e.getActionCommand().equals("cos")) { this.a = Math.cos(this.a); tf.setText(String.valueOf(a)); } else if (e.getActionCommand().equals("tan")) { this.a = Math.tan(this.a); tf.setText(String.valueOf(a)); } else if (e.getActionCommand().equals("lg")) { this.a = Math.log10(this.a); tf.setText(String.valueOf(a)); } else if (e.getActionCommand().equals("π")) { this.a = Math.PI; tf.setText(String.valueOf(a)); } else if (e.getActionCommand().equals(".")) { fd = 1; } } public void opt(int number) { //具体操作 if (this.f == 0) // the first number { if (fd == 0) // 梅小数点 { this.a = this.a * 10 + number; tf.setText(String.valueOf((int) this.a)); } else {// 有小数点 double dnumber; dnumber = (double) number / t; t = t * 10.0; this.a += dnumber; BigDecimal BB = new BigDecimal(this.a); // 四舍五入取值 double dd = BB.setScale(8, BigDecimal.ROUND_HALF_DOWN).doubleValue(); tf.setText(String.valueOf(dd)); } } // this second number else { // t=10; if (fd == 0) // 梅小数点 { this.b = this.b * 10 + number; tf.setText(String.valueOf((int) this.b)); } else { double dnumber; dnumber = (double) number / t; t = t * 10.0; this.b += dnumber; BigDecimal BB = new BigDecimal(this.b); double dd = BB.setScale(8, BigDecimal.ROUND_HALF_DOWN).doubleValue(); tf.setText(String.valueOf(dd)); } } } public void calcu(double a, double b, int f) { double sum = 789; switch (f) { case 0: //无操作直接按等于 case 1: // 加 sum = a + b; break; case 2: // 减 sum = a - b; break; case 3: // 乘 sum = a * b; break; case 4: // 除 sum = a / b; break; case 5: // 取MOD sum = (int) a % (int) b; break; case 6: // 取次方 sum = Math.pow(a, b); break; } double Q = sum; int QQ = (int) Q; double QQQ = (double) QQ; if (QQQ == sum) tf.setText(String.valueOf(QQ)); else tf.setText(String.valueOf(sum)); this.a = sum; } public static void main(String[] args) { mine kk = new mine(); } }