永发信息网

用java编写计算器 能够实现简单的加、减、乘、除、乘方、开方运算等;

答案:1  悬赏:30  手机版
解决时间 2021-01-04 09:33
用java编写计算器 能够实现简单的加、减、乘、除、乘方、开方运算等;
最佳答案

//注意,没有考虑*/和+-的优先级.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Calculator3 extends JFrame implements ActionListener {
private boolean dotExist, operated, equaled; // 帮助运算的布尔变量
private double storedNumber; // 目前的结果
private char lastOperator; // 表示上一运算符
private JTextField operation; // 结果栏
private JButton dot, plus, minus, multi, div, sqrt, equal, changePN, clear; // 运算符
private JButton[] numbers; // 数字
// 构造者
public Calculator3() {
setTitle(Calculator);
// 初始化变量
dotExist = false; // 表示当前的数是否有小数点
operated = false; // 表示任意运算符是否被按下
equaled = false; // 表示等号是否被按下
storedNumber = 0;
lastOperator = '?';
// 初始化窗口变量
operation = new JTextField(0);
operation.setEditable(false);
numbers = new JButton[10];
for (int i = 0; i < 10; i++)
numbers[i] = new JButton( + i);
dot = new JButton(.);
plus = new JButton(+);
minus = new JButton(-);
multi = new JButton(*);
div = new JButton(/);
sqrt = new JButton(√);
equal = new JButton(=);
changePN = new JButton(±);
clear = new JButton(AC);
// 将窗口物体放入窗口
GridBagLayout layout = new GridBagLayout();
getContentPane().setLayout(layout);
addComponent(layout, operation, 0, 0, 4, 1);
addComponent(layout, numbers[1], 1, 0, 1, 1);
addComponent(layout, numbers[2], 1, 1, 1, 1);
addComponent(layout, numbers[3], 1, 2, 1, 1);
addComponent(layout, numbers[4], 2, 0, 1, 1);
addComponent(layout, numbers[5], 2, 1, 1, 1);
addComponent(layout, numbers[6], 2, 2, 1, 1);
addComponent(layout, numbers[7], 3, 0, 1, 1);
addComponent(layout, numbers[8], 3, 1, 1, 1);
addComponent(layout, numbers[9], 3, 2, 1, 1);
addComponent(layout, dot, 4, 0, 1, 1);
addComponent(layout, numbers[0], 4, 1, 1, 1);
addComponent(layout, sqrt, 4, 2, 1, 1);
addComponent(layout, plus, 1, 3, 1, 1);
addComponent(layout, minus, 2, 3, 1, 1);
addComponent(layout, multi, 3, 3, 1, 1);
addComponent(layout, div, 4, 3, 1, 1);
addComponent(layout, equal, 5, 0, 2, 1);
addComponent(layout, changePN, 5, 2, 1, 1);
addComponent(layout, clear, 5, 3, 1, 1);
}
// 对按钮进行反应的方法
public void actionPerformed(ActionEvent e) {
JButton btn = (JButton) e.getSource();
if (btn == clear) {
operation.setText(0);
dotExist = false;
storedNumber = 0;
lastOperator = '?';
} else if (btn == equal) {
operate('=');
equaled = true;
} else if (btn == plus) {
operate('+');
equaled = false;
} else if (btn == minus) {
operate('-');
equaled = false;
} else if (btn == multi) {
operate('*');
equaled = false;
} else if (btn == div) {
operate('/');
equaled = false;
} else if (btn == changePN) {
operate('p');
operate('=');
equaled = true;
} else if (btn == sqrt) {
operate('s');
operate('=');
equaled = true;
} else {
if (equaled)
storedNumber = 0;
for (int i = 0; i < 10; i++)
if (btn == numbers[i]) {
if (operation.getText().equals(0))
operation.setText( + i);
else if (!operated)
operation.setText(operation.getText() + i);
else {
operation.setText( + i);
operated = false;
}
}
if (btn == dot && !dotExist) {
operation.setText(operation.getText() + .);
dotExist = true;
}
}
}
// 进行运算的方法
private void operate(char operator) {
double currentNumber = Double.valueOf(operation.getText())
.doubleValue();
if (lastOperator == '?')
storedNumber = currentNumber;
else if (lastOperator == '+')
storedNumber += currentNumber;
else if (lastOperator == '-')
storedNumber -= currentNumber;
else if (lastOperator == '*')
storedNumber *= currentNumber;
else if (lastOperator == '/')
storedNumber /= currentNumber;
else if (lastOperator == 'p')
storedNumber *= -1;
else if (lastOperator == 's')
storedNumber = Math.sqrt(currentNumber);
else if (lastOperator == '=' && equaled)
storedNumber = currentNumber;
operation.setText( + storedNumber);
operated = true;
lastOperator = operator;
}
// 快捷使用GridBagLayout的方法
private void addComponent(GridBagLayout layout, Component component,
int row, int col, int width, int height) {
GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.BOTH;
constraints.insets = new Insets(10, 2, 10, 2);
constraints.weightx = 100;
constraints.weighty = 100;
constraints.gridx = col;
constraints.gridy = row;
constraints.gridwidth = width;
constraints.gridheight = height;
layout.setConstraints(component, constraints);
if (component instanceof JButton)
((JButton) component).addActionListener(this);
getContentPane().add(component);
}
// 主方法初始化并显示窗口
public static void main(String[] args) {
Calculator3 calc = new Calculator3();
calc.setSize(290, 400);
calc.setVisible(true);
}
}


我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
iphone7看直播是推出软件后台还在出声音这怎
海洋中有着丰富的资源.从海水中提取食盐,可
单选题下列属于防治空气污染的措施有①在建筑
玉林商贸有限公司地址在什么地方,想过去办事
单选题下列几种信息记录中,其中利用的原理和
求且与欢喜共余生小说,百度云啥的都行
本人买一部手机哪款颜色好看。你们会选哪个颜
阅读下面《孟子》选段,回答问题(6分)孟子
素描上光影什么意思
填补下列名句的空缺处或按要求填空。①荡胸生
海信液晶电视怎么往墙上挂
怎样建最便宜房子?想建一个临时性的房子,只
空调制热面积如何计算
哪种味道的方便面好吃
新三国演义第几集古城相会
推荐资讯
1克拉钻石镶嵌完成后底部3分一处有道看上像裂
钣金喷漆大概要多久才能学会?
卧室放什么招桃花
关于力和重力的说法正确的是A.有受力物体就必
审车需要车主本人去吗
前女友分手后从来没有主动和我说过话,但是有
6月6日为全国的“爱眼日”、爱眼日设立的宗旨
什么人双手是多余的?
梭戛派出所地址在什么地方,想过去办事,
高中数学:关于对数函数的最小值问题
如图是植物细胞与动物细胞示意图,请据图作答
填空题如图所示是观察平面镜成像的装置.在竖
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?