package calculator;
import java.io.*;
public class calculator{
char formula[];
int length = 0;
double numtemp;
char signstemp;
int count = 0; //计数器,计算recursion递归的长度
public void judge(){ //提取一个数字和一个运算符号
char[] number = new char[formula.length-length]; //创建number记录数字部分
String m; //提取数字的中间变量
int n = 0; //number的计数器
signstemp = formula[length]; //把算式中下一个数字和符号提取出来
length++;
do{
number[n] = signstemp;
n++;
signstemp = formula[length];
length++;
}while(!(signstemp == '+'||signstemp == '-'||signstemp == '*'||signstemp == '/'||signstemp == '='));
m = String.valueOf(number);
numtemp = Double.valueOf(m).doubleValue();
}
public double math(double a,char b, double c){
switch(b){
case '+':a+=c;break;
case '-':a-=c;break;
case '*':a*=c;break;
case '/':a/=c;break;
default:System.out.println("计算出错!");
}
return a;
}
public void recursion(){
double number;
char signs;
judge(); //提取,并把提取出的数字和符号保存在方法内,通过递归实现堆栈功能
number = numtemp;
signs = signstemp;
if(count == 0){ // 递归长度为1时
count++;
while(signstemp != '='){ //当遇到等号前不断重复
recursion();
number = math(number,signs,numtemp);
signs = signstemp;
}
numtemp = number; //计算结束后输出计算结果
}else{
count++;
if(signs == '+'||signs == '-'||signs == '='); //如果遇到"+""-""="返回并计算当前的结果
else{ //遇到"*""/"继续递归,当递归结束,则开始进行计算
recursion();
numtemp = math(number,signs,numtemp);
}
count--;
}
}
public void Include(){ //输入算式,并把算式改变成字符串形式
String temp = "";
System.out.println("请输入算式:");
try{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
temp = in.readLine();
}catch(IOException e){System.out.println("产生异常");}
if(temp.length() == 0){
System.out.println("输入错误");
}
else{
formula = temp.toCharArray(); //把输入的算式改变成字符串形式
}
}
public void out(){
System.out.println(numtemp);
}
public static void main(String[] args){
calculator a = new calculator();
a.Include();
a.recursion();
a.out();
}
}
用了递归的方法计算,用递归的方法类似C的堆栈的用法。几个全局变量做为中间变量传递数值。用了递归的方法计算,用递归的方法类似C的堆栈的用法。几个全局变量做为中间变量传递数值。