java 计算器代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 计算器代码相关的知识,希望对你有一定的参考价值。
我们实习 最后做一个计算器 请兄弟 帮帮 吧代码给我 最好几种方法!!!
import javax.swing.*;import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.HashMap;
/**
* 我的计算器。Cheshi 继承于 JFrame,是计算器的界面
c*/
public class Cheshi extends JFrame
private Border border = BorderFactory.createEmptyBorder(5, 5, 5, 5);
private JTextField textbox = new JTextField("0");
private CalculatorCore core = new CalculatorCore();
private ActionListener listener = new ActionListener()
public void actionPerformed(ActionEvent e)
JButton b = (JButton) e.getSource();
String label = b.getText();
String result = core.process(label);
textbox.setText(result);
;
public Cheshi(String title) throws HeadlessException
super(title); // 调用父类构造方法
setupFrame(); // 调整窗体属性
setupControls(); // 创建控件
private void setupControls()
setupDisplayPanel(); // 创建文本面板
setupButtonsPanel(); // 创建按钮面板
// 创建按钮面板并添加按钮
private void setupButtonsPanel()
JPanel panel = new JPanel();
panel.setBorder(border);
panel.setLayout(new GridLayout(4, 5, 3, 3));
createButtons(panel, new String[]
"7", "8", "9", "+", "C",
"4", "5", "6", "-", "CE",
"1", "2", "3", "*", "", // 空字符串表示这个位置没有按钮
"0", ".", "=", "/", ""
);
this.add(panel, BorderLayout.CENTER);
/**
* 在指定的面板上创建按钮
*
* @param panel 要创建按钮的面板
* @param labels 按钮文字
*/
private void createButtons(JPanel panel, String[] labels)
for (String label : labels)
// 如果 label 为空,则表示创建一个空面板。否则创建一个按钮。
if (label.equals(""))
panel.add(new JPanel());
else
JButton b = new JButton(label);
b.addActionListener(listener); // 为按钮添加侦听器
panel.add(b);
// 设置显示面板,用一个文本框来作为计算器的显示部分。
private void setupDisplayPanel()
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setBorder(border);
setupTextbox();
panel.add(textbox, BorderLayout.CENTER);
this.add(panel, BorderLayout.NORTH);
// 调整文本框
private void setupTextbox()
textbox.setHorizontalAlignment(JTextField.RIGHT); // 文本右对齐
textbox.setEditable(false); // 文本框只读
textbox.setBackground(Color.white); // 文本框背景色为白色
// 调整窗体
private void setupFrame()
this.setDefaultCloseOperation(EXIT_ON_CLOSE); // 当窗体关闭时程序结束
this.setLocation(100, 50); // 设置窗体显示在桌面上的位置
this.setSize(300, 200); // 设置窗体大小
this.setResizable(false); // 窗体大小固定
// 程序入口
public static void main(String[] args) throws Exception
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
Cheshi frame = new Cheshi("我的计算器");
frame.setVisible(true); // 在桌面上显示窗体
/**
* 计算器核心逻辑。这个逻辑只能处理 1~2 个数的运算。
*/
class CalculatorCore
private String displayText = "0"; // 要显示的文本
boolean reset = true;
private BigDecimal number1, number2;
private String operator;
private HashMap<String, Operator> operators = new HashMap<String, Operator>();
private HashMap<String, Processor> processors = new HashMap<String, Processor>();
CalculatorCore()
setupOperators();
setupProcessors();
// 为每种命令添加处理方式
private void setupProcessors()
processors.put("[0-9]", new Processor()
public void calculate(String command)
numberClicked(command);
);
processors.put("\\.", new Processor()
public void calculate(String command)
dotClicked();
);
processors.put("=", new Processor()
public void calculate(String command)
equalsClicked();
);
processors.put("[+\\-*/]", new Processor()
public void calculate(String command)
operatorClicked(command);
);
processors.put("C", new Processor()
public void calculate(String command)
clearClicked();
);
processors.put("CE", new Processor()
public void calculate(String command)
clearErrorClicked();
);
// 为每种 operator 添加处理方式
private void setupOperators()
operators.put("+", new Operator()
public BigDecimal process(BigDecimal number1, BigDecimal number2)
return number1.add(number2);
);
operators.put("-", new Operator()
public BigDecimal process(BigDecimal number1, BigDecimal number2)
return number1.subtract(number2);
);
operators.put("*", new Operator()
public BigDecimal process(BigDecimal number1, BigDecimal number2)
return number1.multiply(number2);
);
operators.put("/", new Operator()
public BigDecimal process(BigDecimal number1, BigDecimal number2)
return number1.divide(number2, 30, RoundingMode.HALF_UP);
);
// 根据命令处理。这里的命令实际上就是按钮文本。
public String process(String command)
for (String pattern : processors.keySet())
if (command.matches(pattern))
processors.get(pattern).calculate(command);
break;
return displayText;
// 当按下 CE 时
private void clearErrorClicked()
if (operator == null)
number1 = null;
else
number2 = null;
displayText = "0";
reset = true;
// 当按下 C 时,将计算器置为初始状态。
private void clearClicked()
number1 = null;
number2 = null;
operator = null;
displayText = "0";
reset = true;
// 当按下 = 时
private void equalsClicked()
calculateResult();
number1 = null;
number2 = null;
operator = null;
reset = true;
// 计算结果
private void calculateResult()
number2 = new BigDecimal(displayText);
Operator oper = operators.get(operator);
if (oper != null)
BigDecimal result = oper.process(number1, number2);
displayText = result.toString();
// 当按下 +-*/ 时(这里也可以扩展成其他中间操作符)
private void operatorClicked(String command)
if (operator != null)
calculateResult();
number1 = new BigDecimal(displayText);
operator = command;
reset = true;
// 当按下 . 时
private void dotClicked()
if (displayText.indexOf(".") == -1)
displayText += ".";
else if (reset)
displayText = "0.";
reset = false;
// 当按下 0-9 时
private void numberClicked(String command)
if (reset)
displayText = command;
else
displayText += command;
reset = false;
// 运算符处理接口
interface Operator
BigDecimal process(BigDecimal number1, BigDecimal number2);
// 按钮处理接口
interface Processor
void calculate(String command);
参考技术A 给你个文章,里面有全部的代码实现:java简单的计算器
http://www.cxybl.com/html/bcyy/java/201110267166.html 参考技术B import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class three extends JFrame implements ActionListener
private JPanel jPanel1,jPanel2;
private JTextField resultField;
private JButton s1,s2,s3,s4,s5,s6,s7,s8,s9,s0,b1,b2,b3,b4,f1,f2;
private boolean end,add,sub,mul,div;
private String str;
private double num1,num2;
public three()
super("计算器");
setSize(300,240);
Container con=getContentPane();
con.setLayout(new BorderLayout());
jPanel1=new JPanel();
jPanel1.setLayout(new GridLayout(1,1));
jPanel2=new JPanel();
jPanel2.setLayout(new GridLayout(4,4));
resultField=new JTextField("0");
jPanel1.add(resultField);
con.add(jPanel1,BorderLayout.NORTH);
s1=new JButton(" 1 "); s1.addActionListener(this);
s2=new JButton(" 2 "); s2.addActionListener(this);
s3=new JButton(" 3 "); s3.addActionListener(this);
s4=new JButton(" 4 "); s4.addActionListener(this);
s5=new JButton(" 5 "); s5.addActionListener(this);
s6=new JButton(" 6 "); s6.addActionListener(this);
s7=new JButton(" 7 "); s7.addActionListener(this);
s8=new JButton(" 8 "); s8.addActionListener(this);
s9=new JButton(" 9 "); s9.addActionListener(this);
s0=new JButton(" 0 "); s0.addActionListener(this);
b1=new JButton(" + "); b1.addActionListener(this);
b2=new JButton(" - "); b2.addActionListener(this);
b3=new JButton(" * "); b3.addActionListener(this);
b4=new JButton(" / "); b4.addActionListener(this);
f1=new JButton(" . "); f1.addActionListener(this);
f2=new JButton(" = "); f2.addActionListener(this);
jPanel2.add(s1);
jPanel2.add(s2);
jPanel2.add(s3);
jPanel2.add(b1);
jPanel2.add(s4);
jPanel2.add(s5);
jPanel2.add(s6);
jPanel2.add(b2);
jPanel2.add(s7);
jPanel2.add(s8);
jPanel2.add(s9);
jPanel2.add(b3);
jPanel2.add(s0);
jPanel2.add(f1);
jPanel2.add(f2);
jPanel2.add(b4);
con.add(jPanel2,BorderLayout.CENTER);
public void num(int i)
String s = null;
s=String.valueOf(i);
if(end)
//如果数字输入结束,则将文本框置零,重新输入
resultField.setText("0");
end=false;
if((resultField.getText()).equals("0"))
//如果文本框的内容为零,则覆盖文本框的内容
resultField.setText(s);
else
//如果文本框的内容不为零,则在内容后面添加数字
str = resultField.getText() + s;
resultField.setText(str);
public void actionPerformed(ActionEvent e) //数字事件
if(e.getSource()==s1)
num(1);
else if(e.getSource()==s2)
num(2);
else if(e.getSource()==s3)
num(3);
else if(e.getSource()==s4)
num(4);
else if(e.getSource()==s5)
num(5);
else if(e.getSource()==s6)
num(6);
else if(e.getSource()==s7)
num(7);
else if(e.getSource()==s8)
num(8);
else if(e.getSource()==s9)
num(9);
else if(e.getSource()==s0)
num(0);
//符号事件
else if(e.getSource()==b1)
sign(1);
else if(e.getSource()==b2)
sign(2);
else if(e.getSource()==b3)
sign(3);
else if(e.getSource()==b4)
sign(4);
//等号
else if(e.getSource()==f1)
str=resultField.getText();
if(str.indexOf(".")<=1)
str+=".";
resultField.setText(str);
else if(e.getSource()==f2)
num2=Double.parseDouble(resultField.getText());
if(add)
num1=num1 + num2;
else if(sub)
num1=num1 - num2;
else if(mul)
num1=num1 * num2;
else if(div)
num1=num1 / num2;
resultField.setText(String.valueOf(num1));
end=true;
public void sign(int s)
if(s==1)
add=true;
sub=false;
mul=false;
div=false;
else if(s==2)
add=false;
sub=true;
mul=false;
div=false;
else if(s==3)
add=false;
sub=false;
mul=true;
div=false;
else if(s==4)
add=false;
sub=false;
mul=false;
div=true;
num1=Double.parseDouble(resultField.getText());
end=true;
public static void main(String[] args)
three th1=new three();
th1.show();
java计算器源代码
界面如下:可以实现连加
制作计算器是java和Android入门的基础代码,并且计算器的算法有很多种,这里只是抛砖引玉.
来源:柳州网站优化
以上是关于java 计算器代码的主要内容,如果未能解决你的问题,请参考以下文章