java简易计算器报告_java简单计算器实验报告

这是一个使用Java编写的简单计算器程序,实现了基本的数学运算包括加、减、乘、除、求平方根、百分比、倒数等功能。用户界面通过JFrame和JButton组件创建,能够进行数字输入和运算符选择。
摘要由CSDN通过智能技术生成

展开全部

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class 计算器 extends JFrame implements ActionListener {

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

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

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

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

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

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

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

private JTextField resultText = new JTextField();

private boolean firstDigit = true;

private double resultNum = 0.0;

private String operator = "=";

static double mr;// 记忆的数字

private boolean operateValidFlag = true;

JPanel panel[]=new JPanel[4];

public 计算器(){

super("计算器");

init();

setBackground(Color.LIGHT_GRAY);

setResizable(false);

setLocation(588, 250);

setSize(378,214);

setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); //窗口不能直接关闭

setVisible(true);

addWindowListener( new WindowAdapter() {

public void windowClosing(WindowEvent e){

if (JOptionPane.showConfirmDialog(null,"确定退出? ", "提示",2)==0){

System.exit(0);

}}});

}

private void init() {

setLayout(null);

for (int i = 0; i < 4; i++) {

panel[i]=new JPanel();

add(panel[i]);

}

panel[0].setLayout(new GridLayout(1,1,3,3));

panel[1].setLayout(new GridLayout(1,3,3,3));

panel[2].setLayout(new GridLayout(5,1,3,3));

panel[3].setLayout(new GridLayout(4,5,3,3));

resultText.setHorizontalAlignment(JTextField.RIGHT);

resultText.setAlignmentX(50);

resultText.setEditable(true);

resultText.setFont(new Font("宋体",Font.PLAIN,19));//设置字体

resultText.setBackground(Color.white);

panel[0].add(resultText);

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

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

panel[3].add(keys[i]);

if (i%5-3==0){keys[i].setForeground(Color.red); }

else{keys[i].setForeground(Color.black);}

keys[i].setVisible(true);

keys[i].setFont(new Font(null,Font.PLAIN,17));//设置字体

keys[i].addActionListener(this);

keys[i].setHorizontalAlignment(keys[i].CENTER);

keys[i].setBackground(new Color(255,236,233));

}

keys[4].setFont(new Font(null,Font.PLAIN,13));//设置字体

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

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

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

panel[1].add(commands[i]);

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

commands[i].addActionListener(this);

}

commands[0].setFont(new Font(null,Font.PLAIN,12));//设置字体

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

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

panel[2].add(m[i]);

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

m[i].addActionListener(this);

}

panel[0].setBounds(2, 0, 370, 30);

panel[1].setBounds(74, 30, 298, 29);

panel[2].setBounds(2,30, 70, 150);

panel[3].setBounds(74,60, 300, 120);

validate();

}

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 (label.equals(M[4])){ //用户按了"M+"键

mr=mr+Double.valueOf(resultText.getText()).doubleValue();

if (mr==0.0){m[0].setText("");}

else {m[0].setText("M");}

} else if (label.equals(M[3])){ //用户按了"MS"键

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

if (mr==0.0){m[0].setText("");}

} else if (label.equals(M[2])){ //用户按了"MR"键

resultText.setText(""+mr);

} else if (label.equals(M[1])){ //用户按了"MC"键

mr=0.0;

m[0].setText("");

} else if (label.equals("sqrt")) { //平方根运算

resultNum = Math.sqrt(Double.valueOf(resultText.getText()).doubleValue());

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

} else if (label.equals("%")){ //百分号运算,除以100

resultNum = Double.valueOf(resultText.getText()).doubleValue() / 100;

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

} else if (label.equals("+/-")){ //正数负数运算

resultNum = Double.valueOf(resultText.getText()).doubleValue() * (-1);

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

} else if (label.equals("1/x")) { //倒数运算

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

if (resultNum == 0.0){ //操作不合法

operateValidFlag = false;

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

} else {

resultNum = 1 / resultNum;

}

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

} else if ("0123456789.".indexOf(label) >= 0) { //用户按了数字键或者小数点键

handleNumber(label);

} else { //用户按了运算符键

handleOperator(label);

}

}

private void handleBackspace() { // 处理Backspace键被按下的事件

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);

}

}

}

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; //以后输入的肯定不是第一个数字了

}

private void handleC() { //处理C键被按下的事件, 初始化计算器的各种值

resultText.setText("0");

firstDigit = true;

operator = "=";

}

private void handleOperator(String key) { //处理运算符键被按下的事件

if (operator.equals("÷")) { //除法运算 ,如果当前结果文本框中的值等于0

if (getNumberFromText() == 0.0){ //操作不合法

operateValidFlag = false;

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

} else {

resultNum /= getNumberFromText();

}

} else if (operator.equals("+")){ //加法运算

resultNum += getNumberFromText();

} else if (operator.equals("-")){ //减法运算

resultNum -= getNumberFromText();

} else if (operator.equals("×")){ //乘法运算

resultNum *= getNumberFromText();

} 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;

}

private double getNumberFromText() { // 从结果文本框中获取数字

double result = 0;

try {

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

}

catch (NumberFormatException e){ }

return result;

}

public static void main(String args[]) {

new 计算器();

}

}

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值