模拟简单的计算器java,用Java编写一个简单的计算器程序

满意答案

00e27ab806e4881f8254fe7ae8741834.png

zx2504

推荐于 2017.09.22

00e27ab806e4881f8254fe7ae8741834.png

采纳率:48%    等级:11

已帮助:6823人

import java.awt.*;

import java.awt.event.*;

public class CalcAppDemo extends Frame{

private TextField t_result;

private Panel p_main; //主面板5261

private Panel p_num; //数字面板

private Panel p_oper; //操作符面板

private Panel p_show; //显示面板

private Button b_num[]; //数字按钮4102

private Button b_oper[]; //操作符面板

public CalcAppDemo(String title){

setTitle(title);

t_result = new TextField("0.0", 21);

p_main = new Panel();

p_num = new Panel();

p_oper = new Panel();

p_show = new Panel();

p_main.setLayout(new BorderLayout());

p_num.setLayout(new GridLayout(4, 3, 1, 1));

p_oper.setLayout(new GridLayout(4, 2, 1, 1));

b_num = new Button[12];

for(int i=0; i<9; i++)

{

b_num[i] = new Button(new Integer(i+1).toString());

}

b_num[9] = new Button("0");

b_num[10] = new Button("cls");

b_num[11] = new Button(".");

for(int i=0; i<12; i++)

{

p_num.add(b_num[i]);

}

b_oper = new Button[8];

b_oper[0] = new Button("+");

b_oper[1] = new Button("-");

b_oper[2] = new Button("*");

b_oper[3] = new Button("/");

b_oper[4] = new Button("pow");

b_oper[5] = new Button("sqrt");

b_oper[6] = new Button("+/-");

b_oper[7] = new Button("=");

for(int i=0; i<8; i++) //

{

p_oper.add(b_oper[i]);

}

t_result.setEditable(false);

p_show.add(t_result, BorderLayout.NORTH);

p_main.add(p_show, BorderLayout.NORTH);

p_main.add(p_num, BorderLayout.WEST);

p_main.add(p_oper, BorderLayout.EAST);

this.add(p_main, BorderLayout.CENTER);

setSize(400, 400);

setResizable(false);

pack();

this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

});

ButtonListener b1 = new ButtonListener();

for(int i=0; i<12; i++)

{

b_num[i].addActionListener(b1);

}

for(int i=0; i<8; i++)

{

b_oper[i].addActionListener(b1);

}

}

class ButtonListener implements ActionListener

{

private String lastOp; //存储上一此操作符

private String strVal; //存储数字对1653应的字符串

private double total; //总数

private double number; //存储新输入的数

private boolean firsttime; //判断是否第一次按下的是操作符按钮

private boolean operatorPressed;//判断是否已经按过操作符按钮

ButtonListener()

{

firsttime = true;

strVal = "";

}

//事件处理器

public void actionPerformed(ActionEvent e)

{

String s = ((Button)e.getSource()).getLabel().trim();

if(Character.isDigit(s.charAt(0)))

{//判断是操作数还是操作符

handleNumber(s);

}

else

{

calculate(s);

}

}

//判断是一元操作符还是二元操作符,并根据操作符类型做计算

void calculate(String op)

{

operatorPressed = true;

if(firsttime&&! isUnary(op))

{

total = getNumberOnDisplay();

firsttime = false;

}

if(isUnary(op))

{

handleUnaryOp(op);

}

else if(lastOp != null)

{

handleBinaryOp(lastOp);

}

if(! isUnary(op))

{

lastOp = op;

}

}

//判断是否一元操作符

boolean isUnary(String s)

{

return s.equals("=")

||s.equals("cls")||s.equals("sqrt")

||s.equals("+/-")||s.equals(".");

}

//处理一元操作符

void handleUnaryOp(String op)

{

if(op.equals("+/-"))

{//

number = negate(getNumberOnDisplay() + "");

t_result.setText("");

t_result.setText(number + "");

return;

}else if(op.equals("."))

{

handleDecPoint();

return;

}else if(op.equals("sqrt"))

{

number = Math.sqrt(getNumberOnDisplay());

t_result.setText("");

t_result.setText(number + "");

return;

}else if(op.equals("="))

{//

if(lastOp!= null && !isUnary(lastOp))

{

handleBinaryOp(lastOp);

}

lastOp = null;

firsttime = true;

return;

}else

{

clear();

}

}

//处理二元运算符

void handleBinaryOp(String op)

{

if(op.equals("+"))

{

total +=number;

}else if(op.equals("-"))

{

total -=number;

}else if(op.equals("*"))

{

total *=number;

}else if(op.equals("/"))

{

try

{

total /=number;

}catch(ArithmeticException ae){}

}else if(op.equals("pow"))

total = Math.pow(total, number);

//t_result.setText("");

lastOp = null;

// strVal = "";

number = 0;

t_result.setText(total + "");

}

//该方法用于处理数字按钮

void handleNumber(String s)

{

if(!operatorPressed)

{

strVal += s;

}else

{

operatorPressed = false;

strVal = s;

}

//

number = new Double(strVal).doubleValue();

t_result.setText("");

t_result.setText(strVal);

}

//该方法用于按下"."按钮

void handleDecPoint()

{

operatorPressed = false;

//

if(strVal.indexOf(".")<0)

{

strVal += ".";

}

t_result.setText("");

t_result.setText(strVal);

}

//该方法用于将一个数求反

double negate(String s)

{

operatorPressed = false;

//如果是一个整数,去掉小数点后面的0

if(number == (int)number)

{

s = s.substring(0,s.indexOf("."));

}

//如果无"-"增加在该数的前面

if(s.indexOf("-")<0)

{

strVal = "-" + s;

}

else

{

strVal = s.substring(1);

}

return new Double(strVal).doubleValue();

}

//将显示框中的值转换成Double

double getNumberOnDisplay()

{

return new Double(t_result.getText()).doubleValue();

}

//清除屏幕并设置所有的标识

void clear()

{

firsttime = true;

lastOp = null;

strVal = "";

total = 0;

number = 0;

t_result.setText("0");

}

}

public static void main(String[] args) {

CalcAppDemo c = new CalcAppDemo("简单的计算器程序");

c.setVisible(true);

}

}

00分享举报

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值