Java实现简易计算器功能
在Java中实现简易计算器功能可以通过控制台输入运算式并得到结果的方式实现。主要步骤包括解析输入的运算式、进行计算并返回结果。
解析运算式
为了解析运算式,需要将输入的运算式字符串转换成可计算的形式。可以使用Java自带的eval()方法进行转换,例如:
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
String expression="1+2*3";
double result = (Double) engine.eval(expression);
System.out.println(result);
其中,ScriptEngineManager和ScriptEngine是Java中提供的用于将字符串转换为可执行代码的工具类。通过getEngineByName()方法获取js类型的ScriptEngine,并将字符串"1+2*3"赋值给变量expression。最后使用eval()方法运行代码,并返回结果。
实现计算器功能
解析运算式后,需要针对输入的运算式进行计算,得出结果。以四则运算为例,可以通过栈来实现计算器功能。首先需要定义两个栈:一个存储运算符的栈和一个存储数字的栈。接下来,遍历运算式中的每一个字符,如果该字符是数字,则将其压入数字栈中;如果该字符是运算符,则需要和运算符栈中的栈顶元素进行比较,如果该运算符的优先级比栈顶元素高,则将该运算符压入运算符栈中;如果该运算符的优先级比栈顶元素低或相等,则需要将栈顶元素弹出并进行运算,然后将计算结果压入数字栈中。最后,运算式遍历完成后,数字栈中仅剩一个元素,即为运算的结果。
示例1:计算3+5-2
String expression="3+5-2";
//创建两个栈
Stack<Double> numStack=new Stack<>();
Stack<Character> optStack=new Stack<>();
for(int i=0;i<expression.length();i++){
char c=expression.charAt(i);
//如果该字符是数字,则将其压入数字栈中
if(Character.isDigit(c)){
numStack.push((double)c-'0');
}else{
while(!optStack.isEmpty()&&getPriority(optStack.peek())>=getPriority(c)){
double num2=numStack.pop();
double num1=numStack.pop();
char opt=optStack.pop();
double result=calculate(num1,num2,opt);
numStack.push(result);
}
optStack.push(c);
}
}
while(!optStack.isEmpty()){
double num2=numStack.pop();
double num1=numStack.pop();
char opt=optStack.pop();
double result=calculate(num1,num2,opt);
numStack.push(result);
}
double result=numStack.pop();
System.out.println(result);
示例2:计算(3+5)*2
String expression="(3+5)*2";
//创建两个栈
Stack<Double> numStack=new Stack<>();
Stack<Character> optStack=new Stack<>();
for(int i=0;i<expression.length();i++){
char c=expression.charAt(i);
//如果该字符是数字,则将其压入数字栈中
if(Character.isDigit(c)){
numStack.push((double)c-'0');
}else if(c=='('){
//如果该字符是左括号,则将其压入运算符栈中
optStack.push(c);
}else if(c==')'){
//如果该字符是右括号,则将运算符栈中的运算符依次出栈并进行计算
while(optStack.peek()!='('){
double num2=numStack.pop();
double num1=numStack.pop();
char opt=optStack.pop();
double result=calculate(num1,num2,opt);
numStack.push(result);
}
//将左括号出栈
optStack.pop();
}else{
//如果该字符是运算符,则需要和运算符栈中的栈顶元素进行比较
while(!optStack.isEmpty()&&getPriority(optStack.peek())>=getPriority(c)){
double num2=numStack.pop();
double num1=numStack.pop();
char opt=optStack.pop();
double result=calculate(num1,num2,opt);
numStack.push(result);
}
optStack.push(c);
}
}
while(!optStack.isEmpty()){
double num2=numStack.pop();
double num1=numStack.pop();
char opt=optStack.pop();
double result=calculate(num1,num2,opt);
numStack.push(result);
}
double result=numStack.pop();
System.out.println(result);
以上就是Java实现简易计算器功能的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现简易计算器功能 - Python技术站