计算器java源代码解析 java公式解析器

java计算器的源代码

import java.awt.*;

目前创新互联建站已为上千余家的企业提供了网站建设、域名、雅安服务器托管、网站托管维护、企业网站设计、管城网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

import java.awt.event.*;

import java.lang.*;

import javax.swing.*;

public class Counter extends Frame

{

//声明三个面板的布局

GridLayout gl1,gl2,gl3;

Panel p0,p1,p2,p3;

JTextField tf1;

TextField tf2;

Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24,b25,b26;

StringBuffer str;//显示屏所显示的字符串

double x,y;//x和y都是运算数

int z;//Z表示单击了那一个运算符.0表示"+",1表示"-",2表示"*",3表示"/"

static double m;//记忆的数字

public Counter()

{

gl1=new GridLayout(1,4,10,0);//实例化三个面板的布局

gl2=new GridLayout(4,1,0,15);

gl3=new GridLayout(4,5,10,15);

tf1=new JTextField(27);//显示屏

tf1.setHorizontalAlignment(JTextField.RIGHT);

tf1.setEnabled(false);

tf1.setText("0");

tf2=new TextField(10);//显示记忆的索引值

tf2.setEditable(false);

//实例化所有按钮、设置其前景色并注册监听器

b0=new Button("Backspace");

b0.setForeground(Color.red);

b0.addActionListener(new Bt());

b1=new Button("CE");

b1.setForeground(Color.red);

b1.addActionListener(new Bt());

b2=new Button("C");

b2.setForeground(Color.red);

b2.addActionListener(new Bt());

b3=new Button("MC");

b3.setForeground(Color.red);

b3.addActionListener(new Bt());

b4=new Button("MR");

b4.setForeground(Color.red);

b4.addActionListener(new Bt());

b5=new Button("MS");

b5.setForeground(Color.red);

b5.addActionListener(new Bt());

b6=new Button("M+");

b6.setForeground(Color.red);

b6.addActionListener(new Bt());

b7=new Button("7");

b7.setForeground(Color.blue);

b7.addActionListener(new Bt());

b8=new Button("8");

b8.setForeground(Color.blue);

b8.addActionListener(new Bt());

b9=new Button("9");

b9.setForeground(Color.blue);

b9.addActionListener(new Bt());

b10=new Button("/");

b10.setForeground(Color.red);

b10.addActionListener(new Bt());

b11=new Button("sqrt");

b11.setForeground(Color.blue);

b11.addActionListener(new Bt());

b12=new Button("4");

b12.setForeground(Color.blue);

b12.addActionListener(new Bt());

b13=new Button("5");

b13.setForeground(Color.blue);

b13.addActionListener(new Bt());

b14=new Button("6");

b14.setForeground(Color.blue);

b14.addActionListener(new Bt());

b15=new Button("*");

b15.setForeground(Color.red);

b15.addActionListener(new Bt());

b16=new Button("%");

b16.setForeground(Color.blue);

b16.addActionListener(new Bt());

b17=new Button("1");

b17.setForeground(Color.blue);

b17.addActionListener(new Bt());

b18=new Button("2");

b18.setForeground(Color.blue);

b18.addActionListener(new Bt());

b19=new Button("3");

b19.setForeground(Color.blue);

b19.addActionListener(new Bt());

b20=new Button("-");

b20.setForeground(Color.red);

b20.addActionListener(new Bt());

b21=new Button("1/X");

b21.setForeground(Color.blue);

b21.addActionListener(new Bt());

b22=new Button("0");

b22.setForeground(Color.blue);

b22.addActionListener(new Bt());

b23=new Button("+/-");

b23.setForeground(Color.blue);

b23.addActionListener(new Bt());

b24=new Button(".");

b24.setForeground(Color.blue);

b24.addActionListener(new Bt());

b25=new Button("+");

b25.setForeground(Color.red);

b25.addActionListener(new Bt());

b26=new Button("=");

b26.setForeground(Color.red);

b26.addActionListener(new Bt());

//实例化四个面板

p0=new Panel();

p1=new Panel();

p2=new Panel();

p3=new Panel();

//创建一个空字符串缓冲区

str=new StringBuffer();

//添加面板p0中的组件和设置其在框架中的位置和大小

p0.add(tf1);

p0.setBounds(10,25,300,40);

//添加面板p1中的组件和设置其在框架中的位置和大小

p1.setLayout(gl1);

p1.add(tf2);

p1.add(b0);

p1.add(b1);

p1.add(b2);

p1.setBounds(10,65,300,25);

//添加面板p2中的组件并设置其的框架中的位置和大小

p2.setLayout(gl2);

p2.add(b3);

p2.add(b4);

p2.add(b5);

p2.add(b6);

p2.setBounds(10,110,40,150);

//添加面板p3中的组件并设置其在框架中的位置和大小

p3.setLayout(gl3);//设置p3的布局

p3.add(b7);

p3.add(b8);

p3.add(b9);

p3.add(b10);

p3.add(b11);

p3.add(b12);

p3.add(b13);

p3.add(b14);

p3.add(b15);

p3.add(b16);

p3.add(b17);

p3.add(b18);

p3.add(b19);

p3.add(b20);

p3.add(b21);

p3.add(b22);

p3.add(b23);

p3.add(b24);

p3.add(b25);

p3.add(b26);

p3.setBounds(60,110,250,150);

//设置框架中的布局为空布局并添加4个面板

setLayout(null);

add(p0);

add(p1);

add(p2);

add(p3);

setResizable(false);//禁止调整框架的大小

//匿名类关闭窗口

addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e1)

{

System.exit(0);

}

});

setBackground(Color.lightGray);

setBounds(100,100,320,280);

setVisible(true);

}

//构造监听器

class Bt implements ActionListener

{

public void actionPerformed(ActionEvent e2)

{

try{

if(e2.getSource()==b1)//选择"CE"清零

{

tf1.setText("0");//把显示屏清零

str.setLength(0);//清空字符串缓冲区以准备接收新的输入运算数

}

else if(e2.getSource()==b2)//选择"C"清零

{

tf1.setText("0");//把显示屏清零

str.setLength(0);

}

else if(e2.getSource()==b23)//单击"+/-"选择输入的运算数是正数还是负数

{

x=Double.parseDouble(tf1.getText().trim());

tf1.setText(""+(-x));

}

else if(e2.getSource()==b25)//单击加号按钮获得x的值和z的值并清空y的值

{

x=Double.parseDouble(tf1.getText().trim());

str.setLength(0);//清空缓冲区以便接收新的另一个运算数

y=0d;

z=0;

}

else if(e2.getSource()==b20)//单击减号按钮获得x的值和z的值并清空y的值

{

x=Double.parseDouble(tf1.getText().trim());

str.setLength(0);

y=0d;

z=1;

}

else if(e2.getSource()==b15)//单击乘号按钮获得x的值和z的值并清空y的值

{

x=Double.parseDouble(tf1.getText().trim());

str.setLength(0);

y=0d;

z=2;

}

else if(e2.getSource()==b10)//单击除号按钮获得x的值和z的值并空y的值

{

x=Double.parseDouble(tf1.getText().trim());

str.setLength(0);

y=0d;

z=3;

}

else if(e2.getSource()==b26)//单击等号按钮输出计算结果

{

str.setLength(0);

switch(z)

{

case 0 : tf1.setText(""+(x+y));break;

case 1 : tf1.setText(""+(x-y));break;

case 2 : tf1.setText(""+(x*y));break;

case 3 : tf1.setText(""+(x/y));break;

}

}

else if(e2.getSource()==b24)//单击"."按钮输入小数

{

if(tf1.getText().trim().indexOf(′.′)!=-1)//判断字符串中是否已经包含了小数点

{

}

else//如果没数点有小

{

if(tf1.getText().trim().equals("0"))//如果初时显示为0

{

str.setLength(0);

tf1.setText((str.append("0"+e2.getActionCommand())).toString());

}

else if(tf1.getText().trim().equals(""))//如果初时显示为空则不做任何操作

{

}

else

{

tf1.setText(str.append(e2.getActionCommand()).toString());

}

}

y=0d;

}

else if(e2.getSource()==b11)//求平方根

{

x=Double.parseDouble(tf1.getText().trim());

tf1.setText("数字格式异常");

if(x0)

tf1.setText("负数没有平方根");

else

tf1.setText(""+Math.sqrt(x));

str.setLength(0);

y=0d;

}

else if(e2.getSource()==b16)//单击了"%"按钮

{

x=Double.parseDouble(tf1.getText().trim());

tf1.setText(""+(0.01*x));

str.setLength(0);

y=0d;

}

else if(e2.getSource()==b21)//单击了"1/X"按钮

{

x=Double.parseDouble(tf1.getText().trim());

if(x==0)

{

tf1.setText("除数不能为零");

}

else

{

tf1.setText(""+(1/x));

}

str.setLength(0);

y=0d;

}

else if(e2.getSource()==b3)//MC为清除内存

{

m=0d;

tf2.setText("");

str.setLength(0);

}

else if(e2.getSource()==b4)//MR为重新调用存储的数据

{

if(tf2.getText().trim()!="")//有记忆数字

{

tf1.setText(""+m);

}

}

else if(e2.getSource()==b5)//MS为存储显示的数据

{

m=Double.parseDouble(tf1.getText().trim());

tf2.setText("M");

tf1.setText("0");

str.setLength(0);

}

else if(e2.getSource()==b6)//M+为将显示的数字与已经存储的数据相加要查看新的数字单击MR

{

m=m+Double.parseDouble(tf1.getText().trim());

}

else//选择的是其他的按钮

{

if(e2.getSource()==b22)//如果选择的是"0"这个数字键

{

if(tf1.getText().trim().equals("0"))//如果显示屏显示的为零不做操作

{

}

else

{

tf1.setText(str.append(e2.getActionCommand()).toString());

y=Double.parseDouble(tf1.getText().trim());

}

}

else if(e2.getSource()==b0)//选择的是“BackSpace”按钮

{

if(!tf1.getText().trim().equals("0"))//如果显示屏显示的不是零

{

if(str.length()!=1)

{

tf1.setText(str.delete(str.length()-1,str.length()).toString());//可能抛出字符串越界异常

}

else

{

tf1.setText("0");

str.setLength(0);

}

}

y=Double.parseDouble(tf1.getText().trim());

}

else//其他的数字键

{

tf1.setText(str.append(e2.getActionCommand()).toString());

y=Double.parseDouble(tf1.getText().trim());

}

}

}

catch(NumberFormatException e){

tf1.setText("数字格式异常");

}

catch(StringIndexOutOfBoundsException e){

tf1.setText("字符串索引越界");

}

}

}

public static void main(String args[])

{

new Counter();

谁能帮我写一个JAVA编写的计算器程序,还要特详细的解析,从总体的解析到甚至每一行的分析!谢谢

package book.gui;

import java.awt.BorderLayout;

import java.awt.Color;

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;

/**

* 一个计算器,与Windows附件自带计算器的标准版功能、界面相仿。

* 但还不支持键盘操作。

*/

public class Calculator extends JFrame implements ActionListener {

/** 计算器上的键的显示名字 */

private final String[] KEYS = { "7", "8", "9", "/", "sqrt", "4", "5", "6",

"*", "%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" };

/** 计算器上的功能键的显示名字 */

private final String[] COMMAND = { "Backspace", "CE", "C" };

/** 计算器左边的M的显示名字 */

private final String[] M = { " ", "MC", "MR", "MS", "M+" };

/** 计算器上键的按钮 */

private JButton keys[] = new JButton[KEYS.length];

/** 计算器上的功能键的按钮 */

private JButton commands[] = new JButton[COMMAND.length];

/** 计算器左边的M的按钮 */

private JButton m[] = new JButton[M.length];

/** 计算结果文本框 */

private JTextField resultText = new JTextField("0");

// 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字

private boolean firstDigit = true;

// 计算的中间结果。

private double resultNum = 0.0;

// 当前运算的运算符

private String operator = "=";

// 操作是否合法

private boolean operateValidFlag = true;

/**

* 构造函数

*/

public Calculator(){

super();

//初始化计算器

init();

//设置计算器的背景颜色

this.setBackground(Color.LIGHT_GRAY);

this.setTitle("计算器");

//在屏幕(500, 300)坐标处显示计算器

this.setLocation(500, 300);

//不许修改计算器的大小

this.setResizable(false);

//使计算器中各组件大小合适

this.pack();

}

/**

* 初始化计算器

*/

private void init() {

// 文本框中的内容采用右对齐方式

resultText.setHorizontalAlignment(JTextField.RIGHT);

// 不允许修改结果文本框

resultText.setEditable(false);

// 设置文本框背景颜色为白色

resultText.setBackground(Color.white);

//初始化计算器上键的按钮,将键放在一个画板内

JPanel calckeysPanel = new JPanel();

//用网格布局器,4行,5列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素

calckeysPanel.setLayout(new GridLayout(4, 5, 3, 3));

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

keys[i] = new JButton(KEYS[i]);

calckeysPanel.add(keys[i]);

keys[i].setForeground(Color.blue);

}

//运算符键用红色标示,其他键用蓝色表示

keys[3].setForeground(Color.red);

keys[8].setForeground(Color.red);

keys[13].setForeground(Color.red);

keys[18].setForeground(Color.red);

keys[19].setForeground(Color.red);

//初始化功能键,都用红色标示。将功能键放在一个画板内

JPanel commandsPanel = new JPanel();

//用网格布局器,1行,3列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素

commandsPanel.setLayout(new GridLayout(1, 3, 3, 3));

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

commands[i] = new JButton(COMMAND[i]);

commandsPanel.add(commands[i]);

commands[i].setForeground(Color.red);

}

//初始化M键,用红色标示,将M键放在一个画板内

JPanel calmsPanel = new JPanel();

//用网格布局管理器,5行,1列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素

calmsPanel.setLayout(new GridLayout(5, 1, 3, 3));

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

m[i] = new JButton(M[i]);

calmsPanel.add(m[i]);

m[i].setForeground(Color.red);

}

//下面进行计算器的整体布局,将calckeys和command画板放在计算器的中部,

//将文本框放在北部,将calms画板放在计算器的西部。

//新建一个大的画板,将上面建立的command和calckeys画板放在该画板内

JPanel panel1 = new JPanel();

//画板采用边界布局管理器,画板里组件之间的水平和垂直方向上间隔都为3象素

panel1.setLayout(new BorderLayout(3, 3));

panel1.add("North", commandsPanel);

panel1.add("West", calckeysPanel);

//建立一个画板放文本框

JPanel top = new JPanel();

top.setLayout(new BorderLayout());

top.add("Center", resultText);

//整体布局

getContentPane().setLayout(new BorderLayout(3, 5));

getContentPane().add("North", top);

getContentPane().add("Center", panel1);

getContentPane().add("West", calmsPanel);

//为各按钮添加事件侦听器

//都使用同一个事件侦听器,即本对象。本类的声明中有implements ActionListener

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

keys[i].addActionListener(this);

}

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

commands[i].addActionListener(this);

}

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

m[i].addActionListener(this);

}

}

/**

* 处理事件

*/

public void actionPerformed(ActionEvent e) {

//获取事件源的标签

String label = e.getActionCommand();

if (label.equals(COMMAND[0])){

//用户按了"Backspace"键

handleBackspace();

} else if (label.equals(COMMAND[1])) {

//用户按了"CE"键

resultText.setText("0");

} else if (label.equals(COMMAND[2])){

//用户按了"C"键

handleC();

} else if ("0123456789.".indexOf(label) = 0) {

//用户按了数字键或者小数点键

handleNumber(label);

// handlezero(zero);

} else {

//用户按了运算符键

handleOperator(label);

}

}

/**

* 处理Backspace键被按下的事件

*/

private void handleBackspace() {

String text = resultText.getText();

int i = text.length();

if (i 0) {

//退格,将文本最后一个字符去掉

text = text.substring(0, i - 1);

if (text.length() == 0) {

//如果文本没有了内容,则初始化计算器的各种值

resultText.setText("0");

firstDigit = true;

operator = "=";

} else {

//显示新的文本

resultText.setText(text);

}

}

}

/**

* 处理数字键被按下的事件

* @param key

*/

private void handleNumber(String key) {

if (firstDigit) {

//输入的第一个数字

resultText.setText(key);

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

//输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面

resultText.setText(resultText.getText() + ".");

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

//如果输入的不是小数点,则将数字附在结果文本框的后面

resultText.setText(resultText.getText() + key);

}

//以后输入的肯定不是第一个数字了

firstDigit = false;

}

/**

* 处理C键被按下的事件

*/

private void handleC() {

//初始化计算器的各种值

resultText.setText("0");

firstDigit = true;

operator = "=";

}

/**

* 处理运算符键被按下的事件

* @param key

*/

private void handleOperator(String key) {

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

//除法运算

//如果当前结果文本框中的值等于0

if (getNumberFromText() == 0.0){

//操作不合法

operateValidFlag = false;

resultText.setText("除数不能为零");

} else {

resultNum /= getNumberFromText();

}

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

//倒数运算

if (resultNum == 0.0){

//操作不合法

operateValidFlag = false;

resultText.setText("零没有倒数");

} else {

resultNum = 1 / resultNum;

}

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

//加法运算

resultNum += getNumberFromText();

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

//减法运算

resultNum -= getNumberFromText();

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

//乘法运算

resultNum *= getNumberFromText();

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

//平方根运算

resultNum = Math.sqrt(resultNum);

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

//百分号运算,除以100

resultNum = resultNum / 100;

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

//正数负数运算

resultNum = resultNum * (-1);

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

//赋值运算

resultNum = getNumberFromText();

}

if (operateValidFlag) {

//双精度浮点数的运算

long t1;

double t2;

t1 = (long) resultNum;

t2 = resultNum - t1;

if (t2 == 0) {

resultText.setText(String.valueOf(t1));

} else {

resultText.setText(String.valueOf(resultNum));

}

}

//运算符等于用户按的按钮

operator = key;

firstDigit = true;

operateValidFlag = true;

}

/**

* 从结果文本框中获取数字

* @return

*/

private double getNumberFromText() {

double result = 0;

try {

result = Double.valueOf(resultText.getText()).doubleValue();

} catch (NumberFormatException e){

}

return result;

}

public static void main(String args[]) {

Calculator calculator1 = new Calculator();

calculator1.setVisible(true);

calculator1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

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://ybzwz.com/article/hhophd.html