用面向对象的方法实现一个小型计算器的功能

用面向对象的方法实现一个小型计算器的功能

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.border.*;

import java.util.LinkedList; //工具包
import java.text.NumberFormat; //文本包

/**
 * java swing简单计算器
 * @author young
 *
 */
public class Calculator extends Frame implements ActionListener // 计算器类
{
JTextField result;
NumberButton numberButton[];
OperatorButton operatorButton[];

Button radixpoint, positiveminus, backspace, reciprocal, equal, clear; // 声明成员变量
// 小数点按钮,正负号按钮,退格按钮,求倒数按钮,等号按钮,清零按钮
Panel panel;
String operator[] = { "+", "-", "*", "/" };

LinkedList linklist;
boolean pressequal = false;

public Calculator() // 构造方法
{
super("计算器");
linklist = new LinkedList();
numberButton = new NumberButton[10];

for (int i = 0; i <= 9; i++) {
numberButton[i] = new NumberButton(i);
numberButton[i].addActionListener(this);
}

operatorButton = new OperatorButton[4];
for (int i = 0; i < 4; i++) {
operatorButton[i] = new OperatorButton(operator[i]);
operatorButton[i].addActionListener(this);
}

radixpoint = new Button(".");
positiveminus = new Button("+/-");
backspace = new Button("CE");
reciprocal = new Button("1/x");
equal = new Button("=");
clear = new Button("C");

radixpoint.setForeground(Color.red);
positiveminus.setForeground(Color.red);
backspace.setForeground(Color.red);
reciprocal.setForeground(Color.red);
equal.setForeground(Color.red);
clear.setForeground(Color.red);

radixpoint.addActionListener(this);
positiveminus.addActionListener(this);
backspace.addActionListener(this);
reciprocal.addActionListener(this);
equal.addActionListener(this);
clear.addActionListener(this);

result = new JTextField(10);
result.setHorizontalAlignment(JTextField.RIGHT);
result.setForeground(Color.black);
result.setBackground(Color.white);
result.setFont(new Font("TimesRoman", Font.PLAIN, 14));
result.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
result.setEditable(false);

panel = new Panel();
panel.setLayout(new GridLayout(4, 5));

panel.add(numberButton[1]);
panel.add(numberButton[2]);
panel.add(numberButton[3]);
panel.add(backspace);
panel.add(clear);

panel.add(numberButton[4]);
panel.add(numberButton[5]);
panel.add(numberButton[6]);
panel.add(operatorButton[0]);
panel.add(operatorButton[2]);

panel.add(numberButton[7]);
panel.add(numberButton[8]);
panel.add(numberButton[9]);
panel.add(operatorButton[1]);
panel.add(operatorButton[3]);

panel.add(numberButton[0]);
panel.add(positiveminus);
panel.add(reciprocal);
panel.add(radixpoint);
panel.add(equal);

add(result, "North");
add(panel, "Center");

addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

setSize(270, 200);
setLocation(300, 230);
setVisible(true);
}

public void actionPerformed(ActionEvent e) // 按钮的单击事件处理方法
{
if (e.getSource() instanceof NumberButton) // 数字按钮
{
NumberButton b = (NumberButton) e.getSource();
if (linklist.size() == 0) {
int number = b.getNumber();
linklist.add("" + number);
result.setText("" + number);
pressequal = false;
}

else if (linklist.size() == 1 && pressequal == false) {
int number = b.getNumber();
String num = (String) linklist.getFirst();
String s = num.concat("" + number);
linklist.set(0, s);
result.setText(s);
} else if (linklist.size() == 1 && pressequal == true) {
int number = b.getNumber();
linklist.removeFirst();
linklist.add("" + number);
pressequal = false;
result.setText("" + number);
} else if (linklist.size() == 2) {
int number = b.getNumber();
linklist.add("" + number);

result.setText("" + number);
} else if (linklist.size() == 3) {
int number = b.getNumber();
String num = (String) linklist.getLast();
String s = num.concat("" + number);
linklist.set(2, s);
result.setText(s);
}
} else if (e.getSource() instanceof OperatorButton) // 操作按钮
{
OperatorButton b = (OperatorButton) e.getSource();
if (linklist.size() == 1) {
String fuhao = b.getOperator();

linklist.add(fuhao);
} else if (linklist.size() == 2) {
String fuhao = b.getOperator();
linklist.set(1, fuhao);
} else if (linklist.size() == 3) {
String fuhao = b.getOperator();
String number1 = (String) linklist.getFirst();
String number2 = (String) linklist.getLast();
String operator = (String) linklist.get(1);
try {
double n1 = Double.parseDouble(number1);
double n2 = Double.parseDouble(number2);
double n = 0;
if (operator.equals("+")) {
n = n1 + n2;
} else if (operator.equals("-")) {
n = n1 - n2;
} else if (operator.equals("*")) {
n = n1 * n2;
} else if (operator.equals("/")) {
n = n1 / n2;
}
linklist.clear();
linklist.add("" + n);
linklist.add(fuhao);
result.setText("" + n);
} catch (Exception ee) {
}
}
} else if (e.getSource() == equal) // 等号按钮
{
pressequal = true;
if (linklist.size() == 1 || linklist.size() == 2) {
String num = (String) linklist.getFirst();
result.setText("" + num);
} else if (linklist.size() == 3) {
String number1 = (String) linklist.getFirst();
String number2 = (String) linklist.getLast();
String operator = (String) linklist.get(1);
try {
double n1 = Double.parseDouble(number1);
double n2 = Double.parseDouble(number2);
double n = 0;
if (operator.equals("+")) {
n = n1 + n2;
} else if (operator.equals("-")) {
n = n1 - n2;
} else if (operator.equals("*")) {
n = n1 * n2;
} else if (operator.equals("/")) {
n = n1 / n2;
}
result.setText("" + n);
linklist.set(0, "" + n);
linklist.removeLast();
linklist.removeLast();

} catch (Exception ee) {
}
}
} else if (e.getSource() == radixpoint) // 小数点按钮
{
if (linklist.size() == 0) {
pressequal = false;
} else if (linklist.size() == 1) {
String dot = radixpoint.getLabel();
String num = (String) linklist.getFirst();
String s = null;
if (num.indexOf(dot) == -1) {
s = num.concat(dot);
linklist.set(0, s);
} else {
s = num;
}
linklist.set(0, s);
result.setText(s);
}

else if (linklist.size() == 3) {
String dot = radixpoint.getLabel();
String num = (String) linklist.getLast();
String s = null;
if (num.indexOf(dot) == -1) {
s = num.concat(dot);
linklist.set(2, s);
} else {
s = num;
}
result.setText(s);
}
} else if (e.getSource() == backspace) // 退格按钮
{
if (linklist.size() == 1) {
String num = (String) linklist.getFirst();
if (num.length() >= 1) {
num = num.substring(0, num.length() - 1);
linklist.set(0, num);
result.setText(num);
} else {
linklist.removeLast();
result.setText("0");
}
} else if (linklist.size() == 3) {
String num = (String) linklist.getLast();
if (num.length() >= 1) {
num = num.substring(0, num.length() - 1);
linklist.set(2, num);
result.setText(num);
} else {
linklist.removeLast();
result.setText("0");
}
}
} else if (e.getSource() == positiveminus) // 正负号按钮
{
if (linklist.size() == 1) {
String number1 = (String) linklist.getFirst();
try {
double d = Double.parseDouble(number1);
d = -1 * d;
String str = String.valueOf(d);
linklist.set(0, str);
result.setText(str);
} catch (Exception ee) {
}
} else if (linklist.size() == 3) {
String number2 = (String) linklist.getLast();
try {
double d = Double.parseDouble(number2);
d = -1 * d;
String str = String.valueOf(d);
linklist.set(2, str);
result.setText(str);
} catch (Exception ee) {
}
}
} else if (e.getSource() == reciprocal) // 求倒数按钮
{
if (linklist.size() == 1 || linklist.size() == 2) {
String number1 = (String) linklist.getFirst();
try {
double d = Double.parseDouble(number1);
d = 1.0 / d;
String str = String.valueOf(d);
linklist.set(0, str);
result.setText(str);
} catch (Exception ee) {
}
} else if (linklist.size() == 3) {
String number2 = (String) linklist.getLast();
try {
double d = Double.parseDouble(number2);
d = 1.0 / d;
String str = String.valueOf(d);
linklist.set(0, str);
result.setText(str);
} catch (Exception ee) {
}
}
} else if (e.getSource() == clear) // 清零按钮
{
pressequal = false;
result.setText("0");
linklist.clear();
}
}

public static void main(String args[]) {
new Calculator();
}
}

class NumberButton extends Button // 数字按钮类
{
int number;

public NumberButton(int number) // 构造方法
{
super("" + number);
this.number = number;
setForeground(Color.blue);
}

public int getNumber() {
return number;
}
}

class OperatorButton extends Button // 运算符号按钮类
{
String operator;

public OperatorButton(String operator) // 构造方法
{
super(operator);
this.operator = operator;
setForeground(Color.red);
}

public String getOperator() {
return operator;
}
}

温馨提示:内容为网友见解,仅供参考
无其他回答

java里使用面向对象的思想编写一个计算器类(Calculator),可以实 ...
package calculate;import java.math.BigDecimal;import java.math.BigInteger;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Calculator { public static void main(String[] args) { System.out.println(calculate("x=1+2+3+4,y=1*2*3*4")); System.out...

1、用面向对象程序设计方法设计一个简单的计算器程序,该程序能完成简单...
int first; \/\/第一个操作数 int second; \/\/第二个操作数 string myOprator; \/\/运算符 int result; \/\/计算结果 \/\/输入参与计算操作数和运算符 Console.WriteLine("我是第一个简单的计算器,可以实现两个整数的加减乘除取余")Console.Write("请输入第一个操作数:");first = int....

老师要求张浩使用面向对象的思想编写一个计算器类(Calculator),可以实 ...
toString());}}\/\/计算器类:Calculator,可以实现两个整数的加减乘除的运算class Calculator {protected int num;\/\/构造方法public Calculator() {num = 0;}\/\/构造方法public Calculator(int num) {this.num = num;}\/\/两个整数的相加运算public Calculator add(Calculator c) {return new Calculator...

...请用面向对象方法设计并实现一个小型复数计算器,包括如下功能: 实...
include<iostream>#include<string>using namespace std;typedef float REAL;#define MAX_BUF_LEN 256typedef struct COMPLEX{REAL r;\/\/ 实部REAL i;\/\/ 虚部};class Complex{private:COMPLEX *cp;public:Complex(){cp = (COMPLEX*)malloc(sizeof(COMPLEX));memset(cp, 0, sizeof(COMPLEX));}Comp...

C# 怎么写个面向对象的计算器?
计算器也面向对象啊。--- 数字类class num { public int num1=1;public int num2=2;public int num3=3;...} 运算类 class Operation{ public string Plus="+";public string Cut="-";...} 符号类 class 符号{ public string 符号a="根号";...} 调用,if(button1.text==Operation....

1.使用面向对象编程方式,编写一个计算器程序,能够实现简单的加减乘除...
int jiafa();int jianfa();int chengfa();int chufa();int pingfanggen();int pingfang();int main(){ while(1){ printf("\\t\\t\\t多功能计算器\\n");printf("\\t\\t1--加法运算\\n");printf("\\t\\t2--减法运算\\n");printf("\\t\\t3--乘法运算\\n");printf("\\t\\t4--除法运算\\n")...

用java面向对象的思想编写计算器能实现加减乘除如何实施写出思路文本的...
int num1; \/\/运算数1 int num2; \/\/运算数2 public int add(){ return (num1 + num2);} public int minus(){ return (num1 - num2);} public int multiple(){ return (num1 * num2);} public int divide(){ return (num1\/num2);} }新建test.class public class test...

用C++编写一个小型复数计算器
请用面向对象方法设计并实现一个小型复数计算器,包括如下功能:实现复数的设置和显示实现复数加减乘除功能,并显示运算结果实现用运算符==进行复数的相等比较,并显示比较结果谁能帮... 请用面向对象方法设计并实现一个小型复数计算器,包括如下功能: 实现复数的设置和显示 实现复数加减乘除功能,并显示运算结果 实现用运算...

用C语言实现一个简单的计算器,要求有面积和体积输出。
代码如下:```c include int main() { float a, b, c, d;scanf("%f %f", &a, &b); \/\/ 输入长和宽 c = a * b; \/\/ 计算面积 d = 2 * (a + b); \/\/ 计算周长 printf("面积 S=%.2f,体积 V=%.2f\\n", c, d); \/\/ 输出面积和周长 return 0;} ```...

用MFC编一个简易的计算器,怎样能删掉数字后面多余的零
首先你应该了解面向对象的基于消息驱动的Windows消息编程,当然,对于编写这个计算器,你不必知道太多的windows编程,你重要会编写基于对话框的简单应用程序就可以了。首先,让我们来仔细了解一下mircosoft的计算器吧,我们发现它是一个基于对话框的含有两的主对话框、一个关于对话框、一个菜单的应用程序。也...

相似回答