计算机软件实习(1.2)计算器

1.6给按钮添加文字

  public void addCenterButton(){
            String btn_next = "%ECB123+456_789*.0/=";
            this.jp_center.setLayout(new GridLayout(5,4));//设置20个按钮四行四列
            for(int i=0;i<20;i++){
                String temp = btn_next.substring(i,i+1);
                JButton btn = new JButton();
                btn.setText(temp);
                jp_center.add(btn);
            }
            this.add(jp_center,BorderLayout.CENTER);//将20个控件插入到中间布局
        }

 1.7给按钮添加监听事件

 public void actionPerformed(ActionEvent e) {
        String clicktr = e.getActionCommand();
        if (".0123456789".indexOf(clicktr) != -1) {                          //设置条件在出现运算符时不执行
            this.input_text.setText(input_text.getText()+clicktr);           //将数字可连续输入在文本框内
            this.input_text.setHorizontalAlignment(JTextField.RIGHT);        //让文本在框内的右侧显示
            //JOptionPane.showMessageDialog(this, clicktr);

        }
    }

逻辑运算相关知识点

逻辑层:CalculatorManager

主要在于如何运算,使用后缀表达式的方法计算。

用户点击按钮输入的是中缀表达式,如:2+3,

在处理的时候给转成后缀表达式:2, 3, +,使用两个栈分别存数字和运算符。

这里需要注意的是,输入的运算符要和栈顶运算符比较:
1.栈顶优先级高,把数字栈栈顶两个元素pop()出来和预算符栈栈顶pop()进行运算,结果存入push()数字栈。

2.再存入输入的运算符、数字。
3.输入的高,直接存。
4.用户输入“=”表示输入完成,将栈中元素依次pop()出,直到清空。

堆栈建立

  Java:堆空间由Java运行时用于为Objects和JRE类分配内存。每当我们创建(new)任何对象时,它总是在堆空间中创建。垃圾收集在堆内存上运行,以释放没有任何引用的对象使用的内存。在堆空间中创建的任何对象都具有全局访问权限,可以从应用程序的任何位置引用.

堆栈的基础概念

2. 堆栈的操作
• PUSH(入栈)操作:将数据存放到堆栈中。堆栈指针(SP)加1,然后在堆栈的顶部加入一 个元素。
• POP(出栈)操作:从堆栈中弹出数据。先将SP所指示的内部ram单元中内容送入直接地址寻址的单元中(目的位置),然后再将堆栈指针(SP)减1。这两种操作实现了数据项的插入和删除。
3、堆栈长度:栈空间的大小
4、栈底(Bottom):栈底指向的是堆栈段中地址最大的字单元。
5、栈顶(Top):栈顶是堆栈指针SP指向的位置。当前栈顶字单元的逻辑地址为 SS:SP(SS为堆栈段的段基址)
6、堆栈的生长方式
• 向上生长:当压入操作后,堆栈指示器SP向地址增大方向变化。
• 向下生长:当压入操作后,堆栈指示器SP向地址减小方向变化。

1.8运算符的处理

else if (clickStr.matches("[\\+\\-*/]{1}")){
            operator = clickStr;
            firstInput =this.input_text.getText();
            this.input_text.setText("");  
}

1.9实现运算功能

else if (clickStr.equals("=")){
            Double a = Double.valueOf(firstInput);
            Double b = Double.valueOf(this.input_text.getText());
            Double result = null;
            switch (operator){
                case"+":
                result = a + b;
                break;
                case"-":
                    result = a - b;
                    break;
                case"*":
                    result = a * b;
                    break;
                case"/":
                    if (b!=0){
                        result = a / b;
                    }
                    break;
            }
            this.input_text.setText(result.toString());
        }
}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值