自制的简易版java计算器
来源:互联网 发布:网络销售好做吗做金融 编辑:程序博客网 时间:2024/05/16 18:11
用了大概3天零散时间吧,结合这学期学过的逆波兰表达式的知识,写了一个简易的java计算器,权当是练手啦。
一共用了3个类,每个类完成不同的功能。
SimpleCalculator类
package myCalculator;import java.awt.*;import java.awt.event.*;import java.util.EventListener;import javax.swing.*;import javax.swing.event.DocumentEvent;import javax.swing.event.DocumentListener;//import org.xml.sax.DocumentHandler;public class SimpleCalculator extends JFrame{ private JLabel lbl1, lbl2; private JTextField tf1, tf2; private Get_exp G = new Get_exp(); private Container c = getContentPane(); public SimpleCalculator(){ super("SimpleCalculator"); c.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 20)); lbl1 = new JLabel("Please enter your expression."); lbl2 = new JLabel("The value of your expression."); tf1 = new JTextField(20); tf2 = new JTextField(20); tf1.setFont(getFont()); tf2.setFont(getFont()); tf1.addActionListener(new Handler1()); tf1.getDocument().addDocumentListener(new Handler2()); tf2.addActionListener(new Handler1()); c.add(lbl1); c.add(tf1); c.add(lbl2); c.add(tf2); setSize(200, 350); setVisible(true); } public static void main(String[] args){ SimpleCalculator app = new SimpleCalculator(); app.addWindowListener(new Handler3()); } class Handler1 implements ActionListener{ public void actionPerformed(ActionEvent e){ if(e.getSource() == tf1){ tf2.setText(G.calculate()); } } } class Handler2 implements DocumentListener{ public void insertUpdate(DocumentEvent e){ G.get_exp(tf1.getText()); } public void removeUpdate(DocumentEvent e){ G.get_exp(tf1.getText()); } public void changedUpdate(DocumentEvent e){ } } static class Handler3 extends WindowAdapter{ public void windowClosing(WindowEvent e){ System.exit(0); } }}
Get_exp类
package myCalculator;class Get_exp { private String exp; public void get_exp(String str){ exp = str; } public String calculate(){ double value = 0; value = (new Do_cal()).docal(exp); value = (double)(Math.round(value*100000))/100000; return String.valueOf(value); }}
Do_cal类
package myCalculator;import java.util.*;public class Do_cal { static int operator(char ch){ switch(ch){ case '+' : return 1; case '-' : return 2; case '*' : return 3; case '/' : return 4; default : return 0; } } static int priority(char c){ switch(c){ case '+' : case '-' : return 1; case '*' : case '/' : return 2; case '(' : return 3; default : return 0; } } double docal(String str){ int i = 0, len; double value = 0.0, temp_value; char c; char temp[] = new char[20]; int j = -1; double out[] = new double[str.length()];//store postorder expression int rear = -1; int flag[] = new int[50];//store if operator for(int k = 0; k < 50; k++) flag[k] = 0; Stack s = new Stack(); int top = -1; len = str.length(); while( i<len ){ c = str.charAt(i); while( (c>='0'&& c<='9') || c == '.' || c == '-'){//c is a positive number if(j == -1){ temp = new char[20];//store number } if(c == '-'){ if(str.charAt(i-1) == '(') temp[++j] = c; else break; } else temp[++j] = c; c = str.charAt(++i); if(!( (c>='0'&& c<='9') || c == '.') ){ String temp_str = new String(temp); temp_value = Double.parseDouble(temp_str); out[++rear] = temp_value; j = -1; } } if(c == '(' || c == ')'){ if(c == '(') s.push(c); else{ char ch; while((ch = (char)s.pop()) != '('){ out[++rear] = 0; flag[rear] = operator(ch); } } } if(c == '+' || c == '-' || c == '*' || c == '/'){ if(s.isEmpty() || priority(c) > priority((char) s.peek()) || priority((char) s.peek()) == 3 ) s.push(c); else{ while(!(s.isEmpty() || (char)s.peek() == '(')){ out[++rear] = 0; flag[rear] = operator((char)s.pop()); } s.push(c); } } if(c == '=') break; i++; } while(!s.isEmpty()){ out[++rear] = 0; flag[rear] = operator((char)s.pop()); } //inorder transform done i = 0; double a = 0, b = 0; while(i <= rear){ if(out[i] != 0.0){ s.push(out[i]); } else{ if(flag[i] != 0.0){ a = (double)s.pop(); b = (double)s.pop(); switch(flag[i]){ case 1 : s.push(a+b); break; case 2 : s.push(b-a); break; case 3 : s.push(a*b); break; case 4 : s.push(b/a); break; default : break; } } else s.push(out[i]); } i++; } value = (double)s.pop(); return value; }}
最后附一张截图
That’s all.
0 0
- 自制的简易版java计算器
- 简易计算器java版
- java版简易计算器
- java编写的简易计算器
- java编写的简易计算器
- Java做的简易计算器
- Java版四则运算简易计算器
- Java版简易计算器 PK Scala版简易计算器
- Android 小程序:自制简易计算器
- 自制的简易通讯录
- java的简易科学计算器的实现
- 用Java编写的简易计算器
- 用java编写的简易计算器
- 用Java编写的简易计算器
- 用netbeans编写的java简易计算器
- Java+NetBeans实现简易的计算器
- java script简易计算器的实现
- 用JAVA写的简易计算器
- CSS3动画入门
- 友元详解
- 项目忽然报错 严重: Error configuring application listener of class 分析与解决
- Arduino与蓝牙的串口通信
- Android玩耍之路20161128
- 自制的简易版java计算器
- 优秀程序员十个习惯
- Dom4j-1.6.1.jar包下datatype包下的目录结构
- Vim配置(二)——安装NERDTree,在CentOS 6.4
- 基于51单片机的半导体制冷小冰箱
- 首记
- 最小乘积(基本型)
- Android6.0 init 深入分析
- foreachRDD常见问题