Java实现四则运算计算器
2018-01-27 16:44
681 查看
Java实现四则运算计算器,支持带有括号的四则运算,以及求余,取倒数,开平方。原理比较简单,界面可能比较粗糙,读者仅供参考,可以自行进行修改。
import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Stack; import javax.swing.*; import javax.xml.soap.Text; public class Calculator extends JFrame{ Stack<Character> priStack=new Stack<Character>(); Stack<Double> numStack=new Stack<Double>(); public Calculator() { Container c=getContentPane(); Font font = new Font("宋体",Font.BOLD,15); this.setLayout(new GridLayout(4,1)); JTextField jt=new JTextField("0"); JTextField jt1=new JTextField(""); jt.setFont(font);jt1.setFont(font); jt1.setHorizontalAlignment(JTextField.RIGHT); jt.setHorizontalAlignment(JTextField.RIGHT); JButton data0=new JButton("0"); JButton data1=new JButton("1"); JButton data2=new JButton("2"); JButton data3=new JButton("3"); JButton data4=new JButton("4"); JButton data5=new JButton("5"); JButton data6=new JButton("6"); JButton data7=new JButton("7"); JButton data8=new JButton("8"); JButton data9=new JButton("9"); JButton left=new JButton("("); JButton l1=new JButton("1/x"); JButton l2=new JButton(" "); JButton l3=new JButton(" "); JButton right=new JButton(")"); JButton point=new JButton("."); JButton sqrt1=new JButton("sqrt"); JButton mod=new JButton("%"); JButton puls=new JButton("+"); JButton minus=new JButton("-"); JButton equ=new JButton("="); JButton mul=new JButton("*"); JButton dvd=new JButton("/"); JButton DEC=new JButton("清零"); JButton back=new JButton("退格"); JPanel jp=new JPanel(); jp.setLayout(new GridLayout(3,5,5,5)); jp.add(data7);jp.add(data8); jp.add(data9);jp.add(puls);jp.add(back); jp.add(data4); jp.add(data5);jp.add(data6); jp.add(minus);jp.add(DEC); jp.add(data1); jp.add(data2);jp.add(data3); jp.add(mul);jp.add(sqrt1); JPanel jpp=new JPanel(); jpp.setLayout(new GridLayout(2,5,5,5)); jpp.add(point);jpp.add(equ);jpp.add(data0); jpp.add(dvd);jpp.add(mod); jpp.add(left);jpp.add(right); jpp.add(l1); jpp.add(l2); jpp.add(l3); c.add(jt);c.add(jt1);c.add(jp);c.add(jpp); this.setSize(400,500); this.setTitle("计算器"); this.setVisible(true); this.setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); sqrt1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(jt.getText().equals("0")) { jt.requestFocus(); }else { String str=jt.getText(); double t1=Double.parseDouble(str); t1=Math.sqrt(t1); str=String.valueOf(t1); jt1.setText(str); } } }); l1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(jt.getText().equals("0")) { jt.requestFocus(); }else { String str=jt.getText(); double t1=Double.parseDouble(str); t1=1/t1; str=String.valueOf(t1); jt1.setText(str); } } }); mod.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(jt.getText().equals("0")) { jt.requestFocus(); }else { String str=jt.getText(); jt.setText(str+"%"); } } }); data0.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(jt.getText().equals("0")) { jt.requestFocus(); }else { String str=jt.getText(); jt.setText(str+"0"); } } }); data1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(jt.getText().equals("0")) { jt.requestFocus(); jt.setText(""); jt.setText("1"); }else { String str=jt.getText(); jt.setText(str+"1"); } } }); data2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(jt.getText().equals("0")) { jt.requestFocus(); jt.setText(""); jt.setText("2"); }else { String str=jt.getText(); jt.setText(str+"2"); } } }); data3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(jt.getText().equals("0")) { jt.requestFocus(); jt.setText(""); jt.setText("3"); }else { String str=jt.getText(); jt.setText(str+"3"); } } }); data4.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(jt.getText().equals("0")) { jt.requestFocus(); jt.setText(""); jt.setText("4"); }else { String str=jt.getText(); jt.setText(str+"4"); } } }); data5.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(jt.getText().equals("0")) { jt.requestFocus(); jt.setText(""); jt.setText("5"); }else { String str=jt.getText(); jt.setText(str+"5"); } } }); data6.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(jt.getText().equals("0")) { jt.requestFocus(); jt.setText(""); jt.setText("6"); }else { String str=jt.getText(); jt.setText(str+"6"); } } }); data7.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(jt.getText().equals("0")) { jt.requestFocus(); jt.setText(""); jt.setText("7"); }else { String str=jt.getText(); jt.setText(str+"7"); } } }); data8.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(jt.getText().equals("0")) { jt.requestFocus(); jt.setText(""); jt.setText("8"); }else { String str=jt.getText(); jt.setText(str+"8"); } } }); data9.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(jt.getText().equals("0")) { jt.requestFocus(); jt.setText(""); jt.setText("9"); }else { String str=jt.getText(); jt.setText(str+"9"); } } }); point.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(jt.getText().equals("0")) { jt.requestFocus(); jt.setText(""); jt.setText("."); }else { String str=jt.getText(); jt.setText(str+"."); } } }); puls.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(jt.getText().equals("0")) { jt.requestFocus(); jt.setText(""); jt.setText("+"); }else { String str=jt.getText(); jt.setText(str+"+"); } } }); minus.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(jt.getText().equals("0")) { jt.requestFocus(); jt.setText(""); jt.setText("-"); }else { String str=jt.getText(); jt.setText(str+"-"); } } }); left.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(jt.getText().equals("0")) { jt.requestFocus(); jt.setText(""); jt.setText("("); }else { String str=jt.getText(); jt.setText(str+"("); } } }); right.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(jt.getText().equals("0")) { jt.requestFocus(); jt.setText(""); jt.setText(")"); }else { String str=jt.getText(); jt.setText(str+")"); } } }); mul.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(jt.getText().equals("0")) { jt.requestFocus(); jt.setText(""); jt.setText("*"); }else { String str=jt.getText(); jt.setText(str+"*"); } } }); dvd.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(jt.getText().equals("0")) { jt.requestFocus(); jt.setText(""); jt.setText("/"); }else { String str=jt.getText(); jt.setText(str+"/"); } } }); //清零 DEC.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { jt.setText("0"); jt1.setText(""); } }); equ.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { String str=jt.getText(); str=str+"#"; String temp; StringBuffer tempNum = new StringBuffer(); StringBuffer string = new StringBuffer().append(str); while (string.length() != 0) { temp = string.substring(0, 1); string.delete(0, 1); if (!isNum(temp)) { if (!"".equals(tempNum.toString())) { double num =Double.parseDouble(tempNum.toString()); numStack.push(num); tempNum.delete(0, tempNum.length()); } while (!compare(temp.charAt(0)) && (!priStack.empty())) { double a = (double) numStack.pop(); double b = (double) numStack.pop(); char ope = priStack.pop(); double result = 0; switch (ope) { case '+': BigDecimal a1=new BigDecimal(Double.toString(a)); BigDecimal b1=new BigDecimal(Double.toString(b)); result =b1.add(a1).doubleValue(); numStack.push(result); break; case '-': BigDecimal a111=new BigDecimal(Double.toString(a)); BigDecimal b111=new BigDecimal(Double.toString(b)); result =b111.subtract(a111).doubleValue(); numStack.push(result); break; case '*': BigDecimal a11=new BigDecimal(Double.toString(a)); BigDecimal b11=new BigDecimal(Double.toString(b)); result =b11.multiply(a11).doubleValue(); numStack.push(result); break; case '/': BigDecimal a1111=new BigDecimal(Double.toString(a)); BigDecimal b1111=new BigDecimal(Double.toString(b)); result=b1111.divide(a1111).doubleValue(); numStack.push(result); break; case '%': result = b %a; numStack.push(result); break; } } if (temp.charAt(0) != '#') { priStack.push(new Character(temp.charAt(0))); if (temp.charAt(0) == ')') { priStack.pop(); priStack.pop(); } } } else tempNum = tempNum.append(temp); } double t=numStack.pop(); jt1.setText(String.valueOf(t)); } } ); back.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { String text=jt.getText(); int i=text.length(); if(i>0) { text=text.substring(0,i-1); if(text.length()==0) jt.setText("0"); else jt.setText(text); } } }); } private boolean isNum(String temp) { return temp.matches("[0,1,2,3,4,5,6,7,8,9,.]"); } private boolean compare(char str) { if (priStack.empty()) { return true; } char last = (char) priStack.lastElement(); if (last == '(') { return true; } switch (str) { case '#': return false; case '(': return true; case ')': return false; case '*': { if (last == '+' || last == '-') return true; else return false; } case '/': { if (last == '+' || last == '-') return true; else return false; } case '%': { if (last == '+' || last == '-') return true; else return false; } case '+': return false; case '-': return false; } return true; } public static void main(String []args) { Calculator c=new Calculator(); } }
相关文章推荐
- Android用java数组实现计算器的四则运算
- Java实现四则运算计算器(支持括号,小数,负数)
- 利用java的swing控件实现四则混合运算计算器
- VC++.NET中用类实现带科学计数法的四则运算计算器(有完整的代码哦)(2005-05-08)
- 利用System.Linq.Expressions实现四则运算计算器(二)
- java 四则运算 栈的实现
- java第二周作业--实现分数的四则运算
- 【栈】一个简答的四则运算计算器的实现
- java中实现四则运算代码
- java小练习(实现分数的四则运算)
- JAVA实现简单四则混合运算
- Java代码实现四则运算
- java实现任意四则运算表达式求值算法
- java 四则运算 栈的实现(原文 http://justsee.iteye.com/blog/1125174)
- 利用System.Linq.Expressions实现四则运算计算器(一)
- java实现一个整数和一个小数的四则运算和求最大值,平均值。
- 一个逆波兰表达式实现的四则混合运算计算器
- Java实现四则运算表达式计算
- qt用设计器实现简单四则运算计算器
- java小练习(实现分数的四则运算)