java计算器代码知识点 java基础运算代码

java 计算器代码

import javax.swing.*;

创新互联长期为上千多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为雁塔企业提供专业的成都网站制作、成都做网站、外贸营销网站建设雁塔网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。

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 HashMapString, Operator operators = new HashMapString, Operator();

private HashMapString, Processor processors = new HashMapString, 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);

}

}

java编程,用代码实现计算器类(Calculator)

public class Calculator {

private int number1;

private int number2;

public Calculator(int number1, int number2) {

this.number1 = number1;

this.number2 = number2;

}

public double add() {

return number1 + number2;

}

public double subtract() {

return number1 - number2;

}

public double multiple() {

return number1 * number2;

}

public double divide() {

if(number2 == 0) {

return 0;

}

return number1 / number2;

}

}

public class TestCalculator {

public static void main(String[] args) {

Calculator calculator = new Calculator(5, 2);

System.out.println(calculator.add());

System.out.println(calculator.subtract());

System.out.println(calculator.multiple());

System.out.println(calculator.divide());

}

}

java 计算器代码带括号 求注释

//引入各种类文件

import java.awt.Button;

import java.awt.Color;

import java.awt.FlowLayout;

import java.awt.Font;

import java.awt.Frame;

import java.awt.GridLayout;

import java.awt.Panel;

import java.awt.TextField;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

//定义JsqFrame继承Frame

class JsqFrame extends Frame {

double d1, d2;  //定义两个double类型的变量

int op = -1;  //定义两个int类型的变量

static TextField tf;//定义静态对象TextField

CalPanelL p1;  //定义CalPanelL对象

// Constructor构造方法

JsqFrame() {

//以下设置属性

super("计算器");

setLayout(new FlowLayout());

setResizable(false);

setSize(250, 250);

tf = new TextField(18);

tf.setEditable(false);

tf.setBackground(Color.lightGray);

tf.setForeground(Color.red);

tf.setFont(new Font("Arial", Font.BOLD, 16));

add(tf);

p1 = new CalPanelL();

add(p1);

setVisible(true);

// addWindowListener(new Wclose());

}

//添加按钮继承Button类

class CalButton extends Button {

CalButton(String s) {

//设置按钮属性

super(s);

setBackground(Color.WHITE); //设置颜色为白色

}

}

//定义显示器继承Panel类

class CalPanelL extends Panel {

CalButton a, c, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, bPN, bPoint,

bAdd, bSub, bMul, bDiv, bL, bR, bLn, bEqual, bCE, bQuit;

CalPanelL() {

//设置显示器的属性

setLayout(new GridLayout(6, 4));

setFont(new Font("TimesRoman", Font.BOLD, 16));

a = new CalButton("");

c = new CalButton("");

b0 = new CalButton("0");

b1 = new CalButton("1");

b2 = new CalButton("2");

b3 = new CalButton("3");

b4 = new CalButton("4");

b5 = new CalButton("5");

b6 = new CalButton("6");

b7 = new CalButton("7");

b8 = new CalButton("8");

b9 = new CalButton("9");

bPN = new CalButton("+/-");

bPoint = new CalButton(".");

// 设置按钮

bAdd = new CalButton("+");

bSub = new CalButton("-");

bMul = new CalButton("*");

bDiv = new CalButton("/");

bL = new CalButton("(");

bR = new CalButton(")");

bLn = new CalButton("ln");

bEqual = new CalButton("=");

bCE = new CalButton("CE");

bQuit = new CalButton("退出");

// 加入按钮

add(a);

add(c);

add(bCE);

bCE.addActionListener(new PressBCE());

add(bQuit);

bQuit.addActionListener(new PressBQuit());

add(b7);

b7.addActionListener(new PressB7());

add(b8);

b8.addActionListener(new PressB8());

add(b9);

b9.addActionListener(new PressB9());

add(bDiv);

bDiv.addActionListener(new PressBDiv());

add(b4);

b4.addActionListener(new PressB4());

add(b5);

b5.addActionListener(new PressB5());

add(b6);

b6.addActionListener(new PressB6());

add(bMul);

bMul.addActionListener(new PressBMul());

add(b1);

b1.addActionListener(new PressB1());

add(b2);

b2.addActionListener(new PressB2());

add(b3);

b3.addActionListener(new PressB3());

add(bSub);

bSub.addActionListener(new PressBSub());

add(b0);

b0.addActionListener(new PressB0());

add(bPoint);

bPoint.addActionListener(new PressBPoint());

add(bPN);

bPN.addActionListener(new PressBPN());

;

add(bAdd);

bAdd.addActionListener(new PressBAdd());

add(bL);

bL.addActionListener(new PressBL());

add(bR);

bR.addActionListener(new PressBR());

add(bLn);

bLn.addActionListener(new PressBLn());

add(bEqual);

bEqual.addActionListener(new PressBEqual());

}

}

//定义PressBAdd实现ActionListener

//大体的意思是按计算机按键的时出发的时间,设置按键的监听[加号的监听事件]

class PressBAdd implements ActionListener {

public void actionPerformed(ActionEvent e) {

try {

String d1 = tf.getText();

op = 0;

tf.setText(d1 + "+");

} catch (Exception ee) {

}

}

}

//定义PressBSub实现ActionListener

//大体的意思是按计算机按键的时出发的时间,设置按键的监听[减号的监听事件]

class PressBSub implements ActionListener {

public void actionPerformed(ActionEvent e) {

try {

String d1 = tf.getText();

op = 1;

tf.setText(d1 + "-");

} catch (Exception ee) {

}

}

}

//定义PressBMul实现ActionListener

//大体的意思是按计算机按键的时出发的时间,设置按键的监听[乘号的监听事件]

class PressBMul implements ActionListener {

public void actionPerformed(ActionEvent e) {

try {

String d1 = tf.getText();

op = 2;

tf.setText(d1 + "*");

} catch (Exception ee) {

}

}

}

//定义PressBDiv实现ActionListener

//大体的意思是按计算机按键的时出发的时间,设置按键的监听[除号的监听事件]

class PressBDiv implements ActionListener {

public void actionPerformed(ActionEvent e) {

try {

String d1 = tf.getText();

op = 3;

tf.setText(d1 + "/");

} catch (Exception ee) {

}

}

}

//定义PressBL实现ActionListener

//大体的意思是按计算机按键的时出发的时间,设置按键的监听[向左键的监听事件]

class PressBL implements ActionListener {

public void actionPerformed(ActionEvent e) {

try {

String d1 = tf.getText();

op = 3;

tf.setText(d1 + "(");

} catch (Exception ee) {

}

}

}

//定义PressBR实现ActionListener

//大体的意思是按计算机按键的时出发的时间,设置按键的监听[向右键的监听事件]

class PressBR implements ActionListener {

public void actionPerformed(ActionEvent e) {

try {

String d1 = tf.getText();

op = 3;

tf.setText(d1 + ")");

} catch (Exception ee) {

}

}

}

//定义PressBEqual实现ActionListener

//大体的意思是按计算机按键的时出发的时间,设置按键的监听[等号的监听事件]

class PressBEqual implements ActionListener {

public void actionPerformed(ActionEvent e) {

try {

Jsq jsq = new Jsq();

String s = tf.getText();

System.out.println(s);

while (s.indexOf("(") + 1  0  s.indexOf(")")  0) {

String s1 = jsq.caculateHigh(s);

System.out.println(s1);

s = s1;

}

String str = jsq.cacluteMain(s);

System.out.println(str);

tf.setText(String.valueOf(str));

} catch (Exception ee) {

}

}

}

/*

* 批量写吧

* 以下是按1、2、3等等的监听事件

* 还有清零的等等监听事件

*/

class PressBLn implements ActionListener {

public void actionPerformed(ActionEvent e) {

try {

double x = Double.parseDouble(tf.getText());

double y;

y = Math.log10(x);

tf.setText(y + "");

} catch (Exception ee) {

}

}

}

class PressBCE implements ActionListener {

public void actionPerformed(ActionEvent e) {

tf.setText("");

}

}

class PressBPN implements ActionListener {

public void actionPerformed(ActionEvent e) {

try {

String text = tf.getText();

if (text != "") {

if (text.charAt(0) == '-')

tf.setText(text.substring(1));

else if (text.charAt(0) = '0'  text.charAt(0) = '9')

tf.setText("-" + text.substring(0));

else if (text.charAt(0) == '.')

tf.setText("-0" + text.substring(0));

}

} catch (Exception ee) {

}

}

}

class PressBPoint implements ActionListener {

public void actionPerformed(ActionEvent e) {

String text = tf.getText();

if (text.lastIndexOf(".") == -1)

tf.setText(text + ".");

}

}

class PressB0 implements ActionListener {

public void actionPerformed(ActionEvent e) {

String text = tf.getText();

tf.setText(text + "0");

}

}

class PressB1 implements ActionListener {

public void actionPerformed(ActionEvent e) {

String text = tf.getText();

tf.setText(text + "1");

}

}

class PressB2 implements ActionListener {

public void actionPerformed(ActionEvent e) {

String text = tf.getText();

tf.setText(text + "2");

}

}

class PressB3 implements ActionListener {

public void actionPerformed(ActionEvent e) {

String text = tf.getText();

tf.setText(text + "3");

}

}

class PressB4 implements ActionListener {

public void actionPerformed(ActionEvent e) {

String text = tf.getText();

tf.setText(text + "4");

}

}

class PressB5 implements ActionListener {

public void actionPerformed(ActionEvent e) {

String text = tf.getText();

tf.setText(text + "5");

}

}

class PressB6 implements ActionListener {

public void actionPerformed(ActionEvent e) {

String text = tf.getText();

tf.setText(text + "6");

}

}

class PressB7 implements ActionListener {

public void actionPerformed(ActionEvent e) {

String text = tf.getText();

tf.setText(text + "7");

}

}

class PressB8 implements ActionListener {

public void actionPerformed(ActionEvent e) {

String text = tf.getText();

tf.setText(text + "8");

}

}

class PressB9 implements ActionListener {

public void actionPerformed(ActionEvent e) {

String text = tf.getText();

tf.setText(text + "9");

}

}

class PressBQuit implements ActionListener {

public void actionPerformed(ActionEvent e) {

System.exit(0);

}

}

public void Js() {

String text = tf.getText();

tf.setText(text);

}

}

JAVA计算器相关代码求大神{详解}

我给你找找

package com.bj.calcultor;

import java.awt.Frame;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.swing.JButton;

import javax.swing.JPanel;

import javax.swing.JTextField;

public class Calcultor extends Frame implements ActionListener {

public static void main(String[] args) {//定义主方

new Calcultor();//创建匿名对象,并调用test()方法;

}

//定义按钮名称

String[] arr={"1","2","3","4","5","6","7","8","9","0","+","-","*","/","=","."};

JButton [] button=new JButton[arr.length];

JButton reset = new JButton("CE");

JTextField display = new JTextField(20);

//创建窗口,定义组件

//执行窗口事件:关闭窗口

private class WindowCloser extends WindowAdapter {

public void windowClosing(WindowEvent we) {

System.exit(0);

}

}

public Calcultor(){

super("计算器");//定义标题

//定义面板容器,并布局

JPanel jpanel=new JPanel(new GridLayout(4,4));

//添加按钮,并给按钮添加名称

for (int i = 0; i arr.length; i++) {

button[i]= new JButton(arr[i]);

jpanel.add(button[i]);

}

JPanel panel2 = new JPanel();

panel2.add("Northr", display);

display.setEnabled(false);

panel2.add("East", reset);

this.add("North", panel2);

this.add("Center", jpanel);

for (int i = 0; i arr.length; i++){

addWindowListener(new WindowCloser());

setVisible(true);

setSize(400,400);

pack();

button[i].addActionListener(this);

reset.addActionListener(this);

display.addActionListener(this);

}

}

@Override

public void actionPerformed(ActionEvent e) {//定义事件

// TODO Auto-generated method stub

Object target=e.getSource();

String lable=e.getActionCommand();

if(target==reset){

handleReset();

}else if("0123456789.".indexOf(lable)0){

handleNumber(lable);

}else{

hadleOperator(lable);

}

}

boolean isFirstDigit=true;

private void hadleOperator(String key) {

if(operator.equals("+")){

number += Double.valueOf(display.getText());

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

number -= Double.valueOf(display.getText());

}else if (operator.equals("*")){

number *= Double.valueOf(display.getText());

}else if (operator.equals("/")){

number /= Double.valueOf(display.getText());

}else if(operator.equals("=")){

number =Double.valueOf(display.getText());

}

display.setText(String.valueOf(number));

operator=key;

isFirstDigit=true;

}

private void handleNumber(String key) {

if(true){

display.setText(key);//把键值设置为文本框内容

}else if(key.equals(".") display.getText().indexOf(".")0){

display.setText(display.getText()+".");//把文本框内容设置:display.getText()+"."

}else if(!key.equals(".")){

display.setText(display.getText() + key);//把文本框内容设置:display.getText()+key

isFirstDigit=false;

}

}

private void handleReset() {

display.setText("0");

isFirstDigit=true;

operator="=";

}

String operator="=";

Double number=0.0;

}


网站标题:java计算器代码知识点 java基础运算代码
分享地址:http://scyanting.com/article/hioioi.html