实验一,计算器的程序制作
1、实验目的
开发一个计算器,让其能够正确运算四则运算及带括号的运算。
2、实验工具
通过Java运行输出。
3、实验内容
预习:
思路:分为两个方面,第一是计算器的界面怎么做,需要什么元素、控件。第二是对运算的实现。
首先来分析一下计算器的基本界面,完成四则运算,基本上就是0~9十个按钮、一个小数点、一个等号、四个加减乘除按钮,还有一个显示文本的Text,一个Backspace键,一个清空(c)键。并将其放到一个5×5的矩阵中,这个布局首先是一个上下结构,上面是一个text文本框,下面是各种按钮。大概长这个样子
重点是计算器运行时的运算逻辑算法:
1、了解基本算法+、-、*、/等二元操作符功能
2、算法思想:
双栈算符优先级法为了实现表达式求值,需要设置两个栈:
一个是运算符栈op,用于寄存运算符;
另一个成为操作数栈Opnd,用于寄存运算数和运算结果。
求值的处理过程是自左至右扫描表达式的每一个字符:
(1)当扫描到的是运算数,则将其压入栈OPND,
(2)当扫描到的是运算符时:
如这个运算符比OP栈顶运算符的优先级高,则入栈;
如这个运算符比OP栈顶运算符优先级低,则从OPND栈中弹出两个运算符,从栈OP中弹出栈顶运算符进行运算,并将运算结果压入栈OPND。
(3)继续处理当前字符,直到遇到结束符为止。
制作过程:
(1)首先,建立框架制作出计算器的模板并将按钮及按钮所对应的元素添加到其中。在这里,我多加了个可以用键盘输入输出的功能,但过程写的有些繁琐。
代码如下:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calculator extends JFrame {
static char A[]={
'0','1','2','3','4','5','6','7','8','9'};
// static double k[]={0.1,0.001,0.0001,0.00001,0.000001,0.0000001};
private JTextField textField1;
private JButton b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,
BACK,C,jia,jian,cheng,chu,deng,dian,zuok,youk;
public Calculator(){
super("计算器");
Container container=getContentPane();
// container.setLayout(new FlowLayout());
container.setLayout(null);
//文本框
textField1=new JTextField("");
textField1=new JTextField(35);
textField1.setBounds(20, 20, 290, 30);
container.add(textField1);
//各种按钮
BACK=new JButton("Backspace");
BACK.setBounds(20, 60, 110, 40);
container.add(BACK);
C=new JButton("C");
C.setBounds(140, 60, 50, 40);
container.add(C);
zuok=new JButton("(");
zuok.setBounds(200, 60, 50, 40);
container.add(zuok);
youk=new JButton(")");
youk.setBounds(260, 60, 50, 40);
container.add(youk);
jia=new JButton("+");
jia.setBounds(200, 110, 50, 40);
container.add(jia);
jian=new JButton("-");
jian.setBounds(260, 110, 50, 40);
container.add(jian);
cheng=new JButton("*");
cheng.setBounds(200, 160, 50, 40);
container.add(cheng);
chu=new JButton("/");
chu.setBounds(260, 160, 50, 40);
container.add(chu);
dian=new JButton(".");
dian.setBounds(140, 260, 50, 40);
container.add(dian);
deng=new JButton("=");
deng.setBounds(200, 210, 110, 90);
container.add(deng);
b0=new JButton("0");
b0.setBounds(20, 260, 110, 40);
container.add(b0);
b1=new JButton("1");
b1.setBounds(20, 210, 50, 40);
container.add(b1);
b2=new JButton("2");
b2.setBounds(80, 210, 50, 40);
container.add(b2);
b3=new JButton("3");
b3.setBounds(140, 210, 50, 40);
container.add(b3);
b4=new JButton("4");
b4.setBounds(20, 160, 50, 40);
container.add(b4);
b5=new JButton("5");
b5.setBounds(80, 160, 50, 40);
container.add(b5);
b6=new JButton("6");
b6.setBounds(140, 160, 50, 40);
container.add(b6);
b7=new JButton("7");
b7.setBounds(20, 110, 50, 40);
container.add(b7);
b8=new JButton("8");
b8.setBounds(80, 110, 50, 40);
container.add(b8);
b9=new JButton("9");
b9.setBounds(140, 110, 50, 40);
container.add(b9);
buttonjudge judge=new buttonjudge();
b1.addActionListener(judge);
b2.addActionListener(judge);
b3.addActionListener(judge);
b4.addActionListener(judge);
b5.addActionListener(judge);
b6.addActionListener(judge);
b7.addActionListener(judge);
b8.addActionListener(judge);
b9.addActionListener(judge);
b0.addActionListener(judge);
jia.addActionListener(judge);
jian.addActionListener(judge);
cheng.addActionListener(judge);
chu.addActionListener(judge);
zuok.addActionListener(judge);
youk.addActionListener(judge);
dian.addActionListener(judge);
BACK.addActionListener(judge);
C.addActionListener(judge);
deng.addActionListener(judge);
//键盘
keyboard KEY=new keyboard();
b0.addKeyListener(KEY);
b1.addKeyListener(KEY);
b2.addKeyListener(KEY);
b3.addKeyListener(KEY);
b4.addKeyListener(KEY);
b5.addKeyListener(KEY);
b6.addKeyListener(KEY);
b7.addKeyListener(KEY);
b8.addKeyListener(KEY);
b9.addKeyListener(KEY);
b0.addKeyListener(KEY);
jia.addKeyListener(KEY);
jian.addKeyListener(KEY);
cheng.addKeyListener(KEY);
chu.addKeyListener(KEY);
zuok.addKeyListener(KEY);