JAVA编程题(AWT计算器)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA编程题(AWT计算器)相关的知识,希望对你有一定的参考价值。

设计一个基于AWT的计算器

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

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

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

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;

参考技术A 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(x<0)
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();


参考技术B import
java.awt.*;
import
java.awt.event.*;
import
javax.swing.*;
public
class
JSQ1
extends
JFrame

//设置按钮
private
JButton
num0=new
JButton("0");
private
JButton
num1=new
JButton("1");
private
JButton
num2=new
JButton("2");
private
JButton
num3=new
JButton("3");
private
JButton
num4=new
JButton("4");
private
JButton
num5=new
JButton("5");
private
JButton
num6=new
JButton("6");
private
JButton
num7=new
JButton("7");
private
JButton
num8=new
JButton("8");
private
JButton
num9=new
JButton("9");
private
JButton
plu=new
JButton("+");
private
JButton
min=new
JButton("-");
private
JButton
mul=new
JButton("x");
private
JButton
div=new
JButton("/");
private
JButton
equ=new
JButton("=");
private
JButton
cle=new
JButton("C");//清除按钮
//设置显示文本行
private
JTextField
space=new
JTextField(30);
public
JSQ1()

//标题
super("计算器");
//面板排列
JPanel
text=new
JPanel();
text.setLayout(new
FlowLayout());
text.add(space);
JPanel
buttons=new
JPanel();
buttons.setLayout(new
GridLayout(4,4));
buttons.add(num9);
buttons.add(num8);
buttons.add(num7);
buttons.add(plu);
buttons.add(num6);
buttons.add(num5);
buttons.add(num4);
buttons.add(min);
buttons.add(num3);
buttons.add(num2);
buttons.add(num1);
buttons.add(mul);
buttons.add(num0);
buttons.add(cle);
buttons.add(equ);
buttons.add(div);
setLayout(new
BorderLayout());
add("Center",text);
add("South",buttons);
space.setText("0");
//设置大小
setSize(400,200);
//设置可见
setVisible(true);

public
static
void
main(String[]
args)

JSQ1
myJSQ=new
JSQ1();

JAVA基础编程

在编写计算器的过程中虽遇到了很多难点,也花费了很多时间,但通过各种方法克服了部分编程困难:

(1)查找API文档,用JAV的AWT和swing里面的类画计算机界面

(2)然后对各个按钮绑定监视器,监听的方法见Event Object类。(难点)

(3)最后各种实现方法详见MATH函数

(4)建议所有的数字都是BigDecimal类型,不过开方该类不提供方法,可以转换为double来计算

以上是关于JAVA编程题(AWT计算器)的主要内容,如果未能解决你的问题,请参考以下文章

一道Java编程题

java编程题

JAVA TCP Socket编程 计算题

java编程题

java编程题

Java编程题:三线程接力