小型计算器 单纯加减乘除


 

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的堆栈的用法。几个全局变量做为中间变量传递数值。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值