📄 ca2.java
字号:
import java.awt.*;
import java.awt.event.*;
public class Ca2 implements ActionListener{
Frame f;
TextField tf ;
int op1,op2,result;
char opr,op;
String oprset = "+-*/()=";
Stack1 stack1;
Stack2 stack2;
boolean end = false;
public Ca2(){
f = new Frame("my caculater");
tf = new TextField(10);
stack1 = new Stack1(100);
stack2 = new Stack2(100);
stack2.push('=');
this.creatUI();
}
public void creatUI(){
Panel p = new Panel();
p.setLayout(new java.awt.GridLayout(5,4));
Button[] b = new Button[20];
String[] label = {"7","8","9","/",
"4","5","6","*",
"1","2","3","+",
"0",".","=","-",
"(",")","开","关"
};
for(int i=0;i<b.length;i++){
b[i] = new Button(label[i]);
b[i].setBackground(new Color(180,200,200));
b[i].setFont(new Font("宋体",Font.BOLD,20));
p.add(b[i]);
b[i].addActionListener(this);
}
f.add(tf,"North");
f.add(p);
f.setSize(300,250);
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(1);
}
});
f.setVisible(true);
}
public void actionPerformed(ActionEvent e){
String s = e.getActionCommand();
char c = s.charAt(0);
if(c>='0' && c<='9'){
if(!end){
tf.setText(tf.getText() + c);
}
else{
tf.setText(c + "");
end = false;
}
}else if(this.isOpr(c)){
if(end == false){
end = true;
op1 = Integer.parseInt(tf.getText());
stack1.push(op1);
}
op = stack2.getTop();
while(this.m1(op,c) == '>'){
op2 = stack1.pop();
op1 = stack1.pop();
op = stack2.pop();
switch(op){
case '+':
result = op1 + op2;
break;
case '-':
result = op1 - op2;
break;
case '*':
result = op1 * op2;
break;
case '/':
result = op1 / op2;
break;
}
stack1.push(result);
op = stack2.getTop();
}
tf.setText(Integer.toString(stack1.getTop()));
if(this.m1(op,c) == '<'){
stack2.push(c);
}else if(this.m1(op,c) == '='){
if(c == ')'){
stack2.pop();
}
if(c == '='){
result = stack1.pop();
tf.setText(Integer.toString(result));
}
}
}
}
public static void main(String[] args){
Ca2 ca = new Ca2();
}
public boolean isOpr(char c){
return oprset.indexOf(c)>=0;
}
public char m1(char c1,char c2){
char[][] set = {{'>','>','<','<','<','>','>'},
{'>','>','<','<','<','>','>'},
{'>','>','>','>','<','>','>'},
{'>','>','>','>','<','>','>'},
{'<','<','<','<','<','=','E'},
{'>','>','>','>','E','>','>'},
{'<','<','<','<','<','E','='}};
return set[oprset.indexOf(c1)][oprset.indexOf(c2)];
}
}
class Stack1{
//属性声明部分
private int top;
private int[] array;
private int size;
//构造方法
public Stack1(int size) {//创建并初始化一个堆栈对象
this.size = size;
array = new int[size];
top = -1;
}
//压栈:若栈不满,则将data插入为栈顶元素,返回值为true;否则返回false。
public boolean push(int data) {
if(top < size-1){
array[++top] = data;
return true;
}
return false;
}
//弹栈
public int pop() {
if(top >= 0){
return array[top--];
}
return 0;
}
//取栈顶元素(不进行弹栈操作)
public int getTop() {
if(top >= 0){
return array[top];
}
return 0;
}
//判断栈是否空
public boolean isEmpty() {
return top<0;
}
//栈置空操作
public void clear() {
top = -1;
}
//获取当前栈中元素个数
public int currentSize() {
return top+1;
}
}
class Stack2{
//属性声明部分
private int top;
private char[] array;
private int size;
//构造方法
public Stack2(int size) {//创建并初始化一个堆栈对象
this.size = size;
array = new char[size];
top = -1;
}
//压栈:若栈不满,则将data插入为栈顶元素,返回值为true;否则返回false。
public boolean push(char data) {
if(top < size-1){
array[++top] = data;
return true;
}
return false;
}
//弹栈
public char pop() {
if(top >= 0){
return array[top--];
}
return 0;
}
//取栈顶元素(不进行弹栈操作)
public char getTop() {
if(top >= 0){
return array[top];
}
return 0;
}
//判断栈是否空
public boolean isEmpty() {
return top<0;
}
//栈置空操作
public void clear() {
top = -1;
}
//获取当前栈中元素个数
public int currentSize() {
return top+1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -