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());
}
}}