首先是Calculator计算器类
package test; public class Calculator { public int addition(int number1, int number2) { return number1+number2; } public int subtraction(int number1, int number2) { return number1-number2; } public int multiplication(int number1, int number2) { return number1*number2; } public int divsition(int number1, int number2) { return number1/number2; } }
接下来是Execute运行类
package test; import java.util.Scanner; public class Execute { public static void main(String[] args) { System.out.println("请输入算术表达式"); Scanner in = new Scanner(System.in); String expression = in.nextLine(); expression=expression+"+1"; System.out.println("内部字符串改变为"+expression); //初始化开始 // char[] Cexpression=expression.toCharArray(); //创建运算器 Calculator calculator=new Calculator(); //数值列表 int[] numbers=new int[10]; int numbersindex=0; //转型列表 char[] sub=new char[10]; //数值下标位置 int count=0; //符号列表 char[] symbols = new char[10]; int symbolsindex=0; //temp1是数值列表上一个数值,temp2是当前的数值 int temp1=0,temp2=0;; //符号 char symbol = 0; int flag=1; //初始化结束 //第一次遍历 for (int i = 0; i < expression.length(); i++) { if(Cexpression[i]>=‘0‘&&sub[i]<=‘9‘){ sub[count++]=Cexpression[i]; }else{ //字符串转型整型 temp2=transition(sub); //当flag=2时进行运算 if(flag==2){ flag=1; //获取数值列表前一个数值; temp1=numbers[numbersindex-1]; //判断symbol乘法还是除法,成功是乘法,失败为除法 if(decide(symbol)){ temp2=calculator.multiplication(temp2,temp1); }else{ temp2=calculator.divsition(temp2,temp1); } //覆盖前一个数值 numbersindex--; } //temp2存入数值列表 numbers[numbersindex++]=temp2; //获取符号 symbol=Cexpression[i]; //转型数值下标位置清零 count=0; //判断是否大于flag,flag=2,不大于则加入到符号列表 if(judge(symbol)>flag){ flag=2; }else{ //加入到符号列表 symbols[symbolsindex++]=symbol; } } } //输出数据结构 System.out.println("输出数据结构"); for(int i:numbers){ System.out.print(i+" "); } System.out.println(); for(char i:symbols){ System.out.print(i); } System.out.println(); int temp=numbers[0]; count=0; for(int i=1;i<numbers.length;i++){ if(symbols[count]==‘+‘){ temp+=numbers[i]; count++; }else if(symbols[count]==‘-‘){ temp-=numbers[i]; count++; } } //输出最终结果 System.out.println("结果为"+temp); //输出数据结构 System.out.println("输出数据结构"); for(int i:numbers){ System.out.print(i+" "); } System.out.println(); for(char i:symbols){ System.out.print(i); } } private static int judge(char symbol) { if(symbol==‘+‘){ return 1; }else if(symbol==‘-‘){ return 1; }else if(symbol==‘*‘){ return 2; }else if(symbol==‘/‘){ return 2; } return 0; } private static boolean decide(char symbol) { if(symbol==‘*‘){ return true; }else if(symbol==‘/‘){ return false; } return false; } private static int transition(char[] sub) { int temp=0; for(int i=0;i<sub.length;i++){ if(sub[i]>‘0‘&&sub[i]<‘9‘){ temp=temp*10; temp+=(sub[i]-‘0‘); } } return temp; } }
代码还是很简单的,主要有两个列表,一个列表存数值,一个列表存符号,如果符号是乘法或者除法,则把当前的数值和数值列表最后的数值相乘或相除,然后覆盖到数字列表的最后,如果不是,则存入数值列表的最后,符号列表添加当前的减法或者乘法
时间: 2024-11-05 02:37:52