简易计算器:JAVA实现

JAVA的课程设计,图形界面,拥有WINDOWNS自带计算器的基本功能

  • 效果图
    在这里插入图片描述
  • 代码
    没有异常处理,计算算法还可以优化
package 计算器;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Calculator {
	private JFrame win;// 窗口
	private JPanel JT, JB;// 文本区,按钮区
	private JTextField JTF;// 文本框
	private JButton[] JBF;// 按钮组
	private String str0 = "";
	private String flag = "";
	private double s1 = 0.0;
	private double s2 = 0.0;
	private double result = 0.0;
	private boolean first = true;

	public Calculator() {
		win = new JFrame("计算器");
		JT = new JPanel();
		JB = new JPanel();
		JTF = new JTextField(20);
		JBF = new JButton[24];
		String[] jb = new String[] { "%", "CE", "C", "←", "²√x", "x²", "1/x", "÷", "7", "8", "9", "x", "4", "5", "6",
				"-", "1", "2", "3", "+", "+/-", "0", ".", "=" };
		for (int i = 0; i < JBF.length; i++) {
			JBF[i] = new JButton(jb[i]);
			JBF[i].setBackground(Color.white);
		}
		composition();
		police();
	}

//将组件嵌入
	private void composition() {
		// 文本区设置
		JT.setLayout(new FlowLayout());
		JT.add(JTF);
		JTF.setEditable(false);
		JTF.setText("0");
		JTF.setHorizontalAlignment(JTextField.RIGHT);
		// 按钮区设置
		JB.setLayout(new GridLayout(6, 4));
		for (int i = 0; i < JBF.length; i++) {
			JB.add(JBF[i]);
		}
		// 窗口设置
		win.add(JT, BorderLayout.NORTH);
		win.add(JB, BorderLayout.CENTER);
		win.setVisible(true);
		win.pack();
		win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

//给按钮添加监视器
	private void police() {
		// %
		JBF[0].addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JTF.setText(String.format("%.5f%%", Double.parseDouble(JTF.getText()) * 100));
			}
		});
		// CE
		JBF[1].addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				s1 = 0;
				str0 = "";
				JTF.setText(str0);
			}
		});
		// C
		JBF[2].addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				result = 0;
				s1 = 0;
				s2 = 0;
				str0 = "";
				JTF.setText(str0);
			}
		});
		// ←
		JBF[3].addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				str0 = JTF.getText().substring(0, JTF.getText().length() - 1);
				JTF.setText(str0);
				s1 = Double.parseDouble(str0);
			}
		});
		// ²√x"
		JBF[4].addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				s1 = Math.sqrt(s1);
				JTF.setText(String.valueOf(s1));
			}
		});
		// x²
		JBF[5].addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				s1 = Math.pow(s1, 2);
				JTF.setText(String.valueOf(s1));
			}
		});
		// 1/x
		JBF[6].addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				s1 = 1 / s1;
				JTF.setText(String.valueOf(s1));
			}
		});
		// 1~9 +-*/
		for (int i = 7; i < 20; i++) {
			JBF[i].addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					String str = e.getActionCommand();
					if (str.equals("+")) {
						s2 = s1;
						s1 = 0.0;
						calculate();
						str0 = "";
						flag = "+";
						JTF.setText(String.valueOf(result));

					} else if (str.equals("-")) {

						s2 = s1;
						s1 = 0.0;
						calculate();
						str0 = "";
						flag = "-";
						JTF.setText(String.valueOf(result));
					} else if (str.equals("x")) {

						s2 = s1;
						s1 = 0.0;
						calculate();
						str0 = "";
						flag = "x";
						JTF.setText(String.valueOf(result));
					} else if (str.equals("÷")) {

						s2 = s1;
						s1 = 0.0;
						calculate();
						str0 = "";
						flag = "/";
						JTF.setText(String.valueOf(result));
					} else {
						if (first) {
							str0 = str0 + str;
							s1 = Double.parseDouble(str0);
							JTF.setText(str0);
						} else {
							result = 0;
							str0 = str0 + str;
							s1 = Double.parseDouble(str0);
							JTF.setText(str0);
							first = true;
						}
					}

				}
			});
		}
		// +/-
		JBF[20].addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (str0.charAt(0) != '-') {
					str0 = "-" + str0;
				} else {
					str0 = str0.substring(1, str0.length());
				}
				s1 = Double.parseDouble(str0);
				JTF.setText(str0);
			}
		});
		// .
		JBF[22].addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				str0 = str0 + ".";
				JTF.setText(str0);
			}
		});
		// 0
		JBF[21].addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String str = e.getActionCommand();
				str0 = str0 + str;
				s1 = Double.parseDouble(str0);
				JTF.setText(str0);
			}
		});
		// =
		JBF[23].addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				s2 = s1;
				s1 = 0;
				calculate();
				s1 = result;
				flag = "";
				str0 = "";
				JTF.setText(String.valueOf(result));
				first = false;
			}
		});
	}
	//核心算法
	private void calculate() {
		switch (flag) {
		case "":
			if (first)
				result = result + s2;
			else
				first = true;

			break;
		case "+":
			result = result + s2;
			break;
		case "-":
			result = result - s2;
			break;
		case "x":
			result = result * s2;
			break;
		case "/":
			result = result / s2;
			break;
		default:
			break;
		}
	}

	public static void main(String[] args) {
		new Calculator();
	}
}

发布了41 篇原创文章 · 获赞 1 · 访问量 1481

猜你喜欢

转载自blog.csdn.net/qq_44467578/article/details/103962268