Java制作计算器实现加减乘除
Java制作计算器主要需要考虑的是加减乘除的运算顺序的优先级,
⽐如:
20-2-1.7*4/5-4 *2,
需要先计算1.7*4/5,
再计算4 *2,
最后从左往右计算加减。
⽹上其他的⼀些计算器都是运⽤队列和栈,中缀表达式转为后缀表达式等操作来进⾏的,⽐如:
这种写法⽐较复杂不易理解。
所以⾃⼰⽤递归的思想写了个计算器:
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Test {
public static void main(String[] args)throws IOException {
System.out.println("请输⼊要计算的运算:");
Scanner scanner =new Scanner(System.in);
System.out.println(saveNumber_()));
}
/
*分割字符串存储运算符和数字分别到calcuStrList和numberList*/
public static String saveNumber_Symbol(String str){
str+="$";//加上"$"⽤于获取分割最后⼀个数字
char[] strChar = CharArray();
List<String> calcuStrList =new ArrayList<>();//存储运算符号
List<String> numberList =new ArrayList<>();//存储数字
StringBuilder buff =new StringBuilder();
int i =0;
for(char ch : strChar){
if(ch =='+'|| ch =='-'|| ch =='*'|| ch =='/'){
calcuStrList.add(String.valueOf(ch));
numberList.String());
buff.delete(0, buff.length());
}else if(ch =='$'){//判断是不是最后⼀个数
numberList.String());
}else{
buff.append(ch);
}
}
return calculationOrder(calcuStrList, numberList);
}
/*控制加减乘除的运算优先级顺序*/
public static String calculationOrder(List<String> calcuStr, List<String> number){
if(calcuStr.size()>0){
int multiply = calcuStr.indexOf("*");
int except = calcuStr.indexOf("/");
//除在前乘在后,或有除⽆乘,则先算除
if((-1!= multiply &&-1!= except && except < multiply)||(ains("/")&&!ains("*"))){ calcuResult("/", calcuStr, number);
}
//乘在前除在后,或有乘⽆除,先算乘
if((-1!= multiply &&-1!= except && multiply < except)||(ains("*")&&!ains("/"))){ calcuResult("*", calcuStr, number);
}
//⽆乘除只有加减,则从左往右计算
if(calcuStr.size()>0){
(0), calcuStr, number);
}
}
(0);
}
/*通过symbol到运算符在calcuStr出现的位置,根据位置在number中到符号前后的两个数进⾏计算*/
public static String calcuResult(String symbol, List<String> calcuStr, List<String> number){
int position = calcuStr.indexOf(symbol);
BigDecimal a =new (position));
BigDecimal b =new (position +1));
String calculateNumber ="";
switch(symbol){
case"-":
calculateNumber = String.valueOf(a.subtract(b));
break;
case"*":
calculateNumber = String.valueOf(a.multiply(b));
break;
case"/":
calculateNumber = String.valueOf(a.divide(b,2, RoundingMode.HALF_UP));//除法保留两位⼩数break;
default:
calculateNumber = String.valueOf(a.add(b));
}
number.set(position, calculateNumber);//两个数运算完后将计算结果覆盖到第⼀个数的位置
return calculationOrder(calcuStr, number);
}
java switch case string}
测试结果:
请输⼊要计算的四则运算:
30-4*7/2+2
18.00
关于递归,以
30-4*7/2+2
为例:
不断递归先运算完乘除,再从左向右按顺序计算加减。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论