JAVA计算器

问题描述:

 * 1、给出一个算数表达式,计算该表达式的结果.

 * 2、表达式格式为:数字字符 ‘0’....到'9',运算符'+','*' 组成。

 * 3、要求,不要调用任何的api来实现 ,使用简单的加减乘除操作来完成。

/**
 *问题描述:
 * 1、给出一个算数表达式,计算该表达式的结果.
 * 2、表达式格式为:数字字符 ‘0’....到'9',运算符'+','*' 组成。
 * 3、要求,不要调用任何的api来实现 ,使用简单的加减乘除操作来完成。
 *
 * 解题思路:
 * 1、扫描表达式,对于加法操作可以直接相加,对于乘法操作,先计算乘法表达式的值,然后再相加到结果集中去。
 */

/**
 * User: wb-cuitongxin
 * Date: 13-6-13
 */
public class CaculateChar {

    public static void main(String[] args) {

        //需要计算结果的表达式
        String expression = "2*3*2+1+2+3*2*2*2";

        //调用方法并且计算结果
        int result = caculateExpression(expression);

        System.out.println(result);
    }

    private static int caculateExpression(String expression) {
        char[] ca = expression.toCharArray();
        int length = ca.length;  //表达式的总体长度
        int sum = 0; //存放加法的结果集
        int multiplication = 1; //存放乘法的结果集
        int i = 1;  //循环字符串的开始下标
        //循环字符串求结果
        while (i<length) {
            //如果当前字符是 乘法符号 '*'
            if(ca[i] == '*') {
                multiplication = ca[i-1] - 48; //把乘号前面的值赋值给--乘法基数变量
                multiplication = multiplication * (ca[i+1] - 48); // 乘号两边的数字相乘
                //判断是否存在连乘的情况
                int j = i+2; //取当前乘号的下一个符号
                while (j<length && ca[j] == '*') {    //如果当前符号的下一个符号是'*' 表示是连乘
                    multiplication = multiplication * (ca[j+1]-48);   //计算连乘的结果
                    j = j+2;                                              //移动连乘的下标
                }
                sum = sum + multiplication; //把乘法的结果加到总的结果中
                i = j;
                continue;
            }
            //如果当前符号是'+'号
            if (ca[i] == '+') {
                //如果表达式的第一个符号元素是'+',则直接把该符号前面的元素放入结果集中去
                if (i==1) {
                    sum = sum + (ca[i-1] - 48);
                    i = i + 2;
                    continue;
                }
                if (ca[i-2] == '+') {
                    sum = sum + (ca[i-1] - 48);
                    i = i + 2;
                    if (i == length) {
                        sum = sum + (ca[i-1] - 48);
                        break;
                    }
                    continue;
                }
                //如果倒数第二个符号是'+'号,则直接把数字加入到结果集中即可
                if (i == ca.length - 2) {
                    sum = sum + (ca[i+1] - 48);
                    i = i + 2;
                    break;
                }
                int j = i+2;
                while (j<length && ca[j] == '+') {
                    sum = sum + (ca[j-1] - 48);
                    j = j + 2;
                }
                i = j;
                continue;
            }
        }
        return sum;
    }

}

 目前这是第一个版本,之后会实现第二个版本

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值