后缀表达式的求值
步骤:
1.将后缀表达式以空格进行拆分,用字符串数组存储每个部分
2.创建一个字符串型的栈用于存储后缀表达式中的数字
3.对字符串数组进行遍历。如果是数字,就入栈; 如果是运算 符,就从栈中出来两个元素,将这两个元素的类型改变为整数类型,配合该运算符进行运算,将运算结果转换为字符串后重新入栈;重复此过程,直到遍历结束
4.输出栈中的栈顶元素(此时栈中只有一个元素),即为后缀表达式的值
代码如下:
public class Demo1 extends JFrame{
private static JTextField textField;
private static JButton button;
private static JTextArea textArea;
private static Stack<String> stack;
public Demo1() {
// TODO Auto-generated constructor stub
setTitle("后缀表达式的运算");
setLayout(null);
setBounds(200,200,400,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
textField = new JTextField(20);
textField.setBounds(30,30,330,30);
button = new JButton("转换");
button.setBounds(150,100,60,30);
button.addActionListener(new myActionListener());
textArea = new JTextArea();
textArea.setBounds(30,180,300,150);
textArea.setBorder(new LineBorder(Color.BLACK,2));
add(textField);
add(button);
add(textArea);
}
public static void main(String[] args) {
new Demo1().setVisible(true);
}
class myActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
textArea.setText("");
stack = new Stack<>();
String string3,string4;
int result;
String string = textField.getText();
String []strings = string.split(" {1,}");
for(String string2 : strings) {
if(string2.equals("+")) {
string3 = stack.pop();
string4 = stack.pop();
result = Integer.parseInt(string4) + Integer.parseInt(string3);
stack.push(result + "");
textArea.append(string4 + "+" + string3 + "=" + result + "\n");
}else if(string2.equals("-")) {
string3 = stack.pop();
string4 = stack.pop();
result = Integer.parseInt(string4) - Integer.parseInt(string3);
stack.push(result + "");
textArea.append(string4 + "-" + string3 + "=" + result + "\n");
}else if(string2.equals("*")) {
string3 = stack.pop();
string4 = stack.pop();
result = Integer.parseInt(string4) * Integer.parseInt(string3);
stack.push(result + "");
textArea.append(string4 + "*" + string3 + "=" + result + "\n");
}else if(string2.equals("/")) {
string3 = stack.pop();
string4 = stack.pop();
result = Integer.parseInt(string4) / Integer.parseInt(string3);
stack.push(result + "");
textArea.append(string4 + "/" + string3 + "=" + result + "\n");
}else {
stack.push(string2);
}
}
//textField.setText("");
}
}
}
运行结果:
该程序在实现后缀表达式的求值基础上,将对后缀表达式的每一步的运算显示到文本域中,供读者理解.谢谢大家