# Java计算器依赖 **Repository Path**: blkan/java-calculator-lib ## Basic Information - **Project Name**: Java计算器依赖 - **Description**: java计算器的依赖,处理计算器的输入文本,根据输入字符串计算结果 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2023-03-21 - **Last Updated**: 2023-12-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 调用 ``` calExpression(String content, boolean printProcess) ``` # 一、表达式组成: 1. e和π 2. 函数sin() cos() tan() 3. 函数arcsin() arccos() arctan() 4. 函数sqrt() 5. 函数lg() ln() 6. 阶乘! 7. ^ 8. +-*/ 9. ( ) # 二、特殊规定 ## 加[] 计算过程中,每完成一步计算,需将计算出来的数字结果用[]括起来(**[]里面的一定是数字**)。 **[]的作用与()类似**,只是**不标定运算顺序**。 比如,对于表达式:1+(0-2)^2 如果不加[],那么计算到下一步就是:1-2^2=-3 而如果加了[],那么就是:1+[-2]^2=5 ## 无圆括号表达式 在加[]的前提下,如果一个表达式没有任何()(可以有[]),那么就规定为**无圆括号表达式**。 # 三、计算无圆括号表达式 要计算无圆括号表达式的值,可以按照以下方法: 1. 替换e和π 2. 计算并替换sin[]、cos[]、tan[] 3. 计算并替换arcsin[]、arccos[]、arctan[] 4. 计算并替换lg[],ln[] 5. 计算并替换sqrt[] 6. 替换二元运算的减号(注意不替换负数的-号) 7. 计算并替换阶乘! 8. 计算次方^ 9. 计算乘除*/ 10. 计算加+(-已在第5步被替换) **注:由于数学表达式中存在数字\*字母可以省略\*号的情况,所以进行前四个替换时,需要判断前一个字符的类型!如果是字符串开头,+-\*/,则直接替换成结果数字;其余情况需要在前面补上一个\*号**。 除了1.,每完成一步计算,需将计算出来的数字结果用[]括起来。 ## 1. 替换e和π ``` public String calEandPI(String content) ``` 替换成String.valueOf(Math.E)和String.valueOf(Math.PI)。 由于e和π绝不是负数,所以不用加[]。 例:e+2e+π 2.718281828459045+2*2.718281828459045+3.141592653589793 ## 2. 计算并替换sin[]、cos[]、tan[] ``` public String calSin(String content) ``` 利用regex捕获[]里面的数字,提取为double类型,传进Math.sin()计算; 替换成String.valueOf(Math.sin(数))。 例:sin[1]-cos[2]+3tan[5] [0.8414709848078965]-[-0.4161468365471424]+3*[-3.380515006246586] ## 3. 计算并替换arcsin[]、arccos[]、arctan[] ``` public String calArcsin(String content) ``` 与2.类似。 ## 4. 计算并替换lg[],ln[] ``` public String calLog(String content) ``` 原理如上。 例:lg[10]+3lg[10]+5*ln[5] [1.0]+3\*[1.0]+5\*[1.6094379124341003] ## 5.计算并替换sqrt[] ``` public String calSqrt(String content) ``` 略 ## 6. 替换二元运算的减号 ``` public String calMinus(String content) ``` 为了防止进行后面的步骤出错,需要将减号(不是负号)替换成负号,即-变成+[-1]* 例如:1-2^2 如果不替换,在进行^运算时会出现将1-2识别为一个数,导致运算错误。 如果替换,则变成了1+[-1]\*2^2=1+[-1]\*4=1+[-4]=[-3] ## 7. 计算并替换阶乘! ``` public String calFact(String content) ``` 识别!的前面一个数字,如果数字是正整数,则计算阶乘,如果数字包含-或.,则结果为NaN。 ## 8. 计算次方^ ``` public String calPow(String content) ``` 获取^左边的数a和右边的数b; 计算Math.pow(a, b)。 ## 9. 计算乘除*/ 类似8. ## 10. 计算加+ 类似上面。 # 四、计算表达式 计算表达式的方法为,先计算表达式里的无圆括号表达式,等主表达式无圆括号时,再按照计算无圆括号表达式的方法计算主表达式。 可以利用正则表达式\\(([\^\\(\\)]+)\\),匹配表达式里面的无圆括号表达式。 如ln(e)+lg(10)+sin(1+2^(2+1))= ln**[2.71...]**+lg(10)+sin(1+2^(2+1))= ln[2.71...]+lg**[10]**+sin(1+2^(2+1))= ln[2.71...]+lg[10]+sin(1+2^**[3]**)= ln[2.71...]+lg[10]+sin(**9**)= ln[2.71...]+lg[10]+sin**[9]**= 2.412118...