作业要求
本次作业需要大家制作可编程计算器。
(1)其界面可参考下图,再加上‘(‘ 和 ’)’
(2)点击 25.6 * 14.5 + 2 这11个符号,按‘=’,可输出结果373.2
(3)点击2 / (5.2 + 78) – 6这12个符号, 按‘=’,可输出结果 -5.97596
(4)若输入语法错误的串,如2 / 5.2 + 78 –, 则需报错。
(5)考虑整型和浮点型问题。对于浮点型,还需考虑精度问题。
(6)考虑除0问题。
(7)考虑键盘操作问题。
注意: 要想计算出值来,必须使用翻译模式。再考虑要计算整个算术表达式的值,则使用综合属性 val。本题翻译模式的提示如下:
E TE’{E.val = T.val + E’.val}
E’ +TE’ {E’.val = T.val + E’.val}
E’ -TE’ {
_________}
E’ ε {E’.val = 0}
T FT’{T.val = F.val * T’.val}
T’ FT’ {T’.val = F.val T’.val}
T’ /FT’ {
_________}
T’ ε {
_______}
F (E) {F.val = E.val}
F i {F.val = i.lexval}
对于 E TE’{E.val = T.val + E’.val}, 其代码经过更改如下:
代码实现
package smartcalculator;
import java.awt.*;
import java.awt.event.*;
public class calculator {
public static void main(String[] args) {
// TODO 自动生成的方法存根
CalFrame f= new CalFrame();
}
}
class CalFrame extends Frame{
double d1,d2;
int op=-1;
TextField tf;
CalPanelL p1;
CalPanelR p2;
CalFrame(){
super("Smart Calculator");
setLayout(new FlowLayout(FlowLayout.CENTER,8,10));
setBackground(new Color(100,150,150));
setForeground(Color.white);
setResizable(false);
setSize(300,200);
tf = new TextField(22);
tf.setEditable(false);
tf.setBackground(new Color(108,118,103));
tf.setForeground(Color.white);
tf.setFont(new Font("Arial",Font.BOLD,16));
add(tf);
p1=new CalPanelL();
p2=new CalPanelR();
add(p1);
add(p2);
setVisible(true);
addWindowListener(new Wclose());
}
class CalButton extends Button{
CalButton(String s){
super(s);
setBackground(Color.gray);
}
}
class CalPanelL extends Panel{
CalButton b0,b1,b2,b3,
b4,b5,b6,b7,
b8,b9,bPN,bPoint;
CalPanelL(){
setLayout(new GridLayout(4,3));
setFont(new Font("TimesRoman",Font.BOLD,16));
b0=new CalButton("0");
b1=new CalButton("1");
b2=new CalButton("2");
b3=new CalButton("3");
b4=new CalButton("4");
b5=new CalButton("5");