表达式计算器是数据结构书籍里面的一个有趣的例子,感觉这里面已经有点编译原理的味道了,它利用栈来实现表达式的计算。它的基本思路是:初始化两个栈,一个是运算符栈,一个是运算数栈。把输入的字符串扫描一遍,遇到数字字符就把它拼成数字,遇到运算符就判断优先级,如果运算符栈中的优先级比较高,就把运算数栈中的数字弹出栈,与扫到的数字运算并压到运算数栈。如果运算符栈中的优先级比较低,就压栈,继续扫描。直到最后扫描完毕,从运算数栈中取出结果。
package main;
import java.util.*;
import java.io.*;
//=============================
//栈的应用之表达式计算器
//作者:落叶似秋
//日期:2015.7.27
//=============================
public class Main
{
public static void main(String[] args)
{
String str=null;
System.out.println("\n**请输入表达式,以等号结束**");
Scanner scan=new Scanner(System.in);
if(isReasonable(str=scan.next()))
{
System.out.println(clearZero(computer(str)));
}
else
{
System.out.println("表达式不合法");
}
main(null);
}
//去掉后面多余的点和零
private static String clearZero(String str)
{
if(str.endsWith(".0"))
{
str=str.substring(0,str.length()-2);
}
return str;
}
//简单验证表达式
private static boolean isReasonable(String str)
{
if(str.length()<=0||!s