解析一个只包含加减运算符的算式

 package p1231;

public class Question3 {
 public static void main(String[] args) {
  String str = "5-5+1-6+7-4-2=";
  char charArray[] = str.toCharArray();
  int result = 0;
  int temp = 0;
  boolean digit = false;
  boolean first = true;
  char oprator = ' ';
  for (int i = 0; i < charArray.length; i++) {
   if (Character.isDigit(charArray[i])) {
    if (digit == false) {
     temp = charArray[i] - '0';
     digit = true;
    } else {
     temp *= 10;
     temp += charArray[i] - '0';
    }
   } else {
    digit = false;
    if (first == true) {
     result = temp;
     first = false;
    }
    if (oprator == '+') {
     result += temp;
    }
    if (oprator == '-') {
     result -= temp;
    }
    if (oprator == '=') {
     break;
    }
    oprator = charArray[i];
   }
  }

  System.out.println(result);

 }

}

\u8fd0\u884c\u7a0b\u5e8f\u53ef\u4ee5\u4f7f\u7528\u4e00\u884c\u7684\u6587\u5b57\u4e32\u8fdb\u884c\u6a21\u62df\uff0c\u8fd9\u4e2a\u6a21\u62df\u7b80\u5355\u8fd0\u7b97\u5668\u5b9e\u73b0\u4e0b\u9762\u4e00\u4e2a\u56db\u5219\u8fd0\u7b97\u7684\u793a\u4f8b\uff1a \u4e00\u4e2a\u7b97\u5f0f\u53ef\u4ee5\u4e3a\uff1a5 + 3 - 2 = \u6b63\u786e\u7684\u8fd0\u7b97\u987a\u5e8f\u662f\uff1a5 + 3 - 2 = 6 \u8fd0\u7b97\u8be6\u7ec6\u8bf4\u660e\uff1a 1. \u9996\u5148\u8fdb\u884c\u52a0\u6cd5\u8fd0\u7b97\uff1a5 + 3 = 8 2. \u5728\u524d\u4e00\u6b21\u7684\u7ed3\u679c8\u4e0a\u6267\u884c\u51cf\u6cd5\uff1a8 - 2 = 6 \u56db\u5219\u8fd0\u7b97\u7684\u987a\u5e8f\u4e3a\uff1a\u9996\u5148\u8fdb\u884c\u4e24\u4e2a\u4e00\u5bf9\u7684\u8fd0\u7b97\uff1a 1. \u5b57\u7b26\u7c7b\u578b\u51b2\u7a81\uff1a\u56db\u5219\u8fd0\u7b97\u4e2d\uff0c\u4e00\u4e9b\u7b26\u53ef\u80fd\u4f1a\u88ab\u62d2\u7edd\uff0c\u56e0\u4e3a\u5b83\u4eec\u7684\u4f18\u5148\u7ea7\u76f8\u540c\uff0c\u6240\u4ee5\u5fc5\u987b\u6309\u7167\u7a7a\u683c\uff0c\u6309\u7167\u7b2c\u4e00\u4e2a\u53f7\uff0c\u6309\u7167\u7b2c\u4e8c\u4e2a\u53f7\uff0c\u6309\u7167\u7b2c\u4e09\u4e2a\u53f7\uff0c\u6309\u7167\u7b2c\u56db\u4e2a\u53f7\u7684\u987a\u5e8f\u8fdb\u884c\u8fdb\u884c\u8ba1\u7b97\u3002 2. \u5b57\u7b26\u5e8f\uff1a\u5这是一个模拟简单计算器的工作,假设计算器只能进行加减乘除运算,运算数和结果都是整数,按从左到右的顺序计算。输入格式: 输入在一行中给出一个四则运算式子,即不超过3个由空格隔开的、或以“=”结束的非负整数,其间以1个空格隔开,且没有多余的空格。当以“=”结束时,整个输入行不超过100个字符;否则,不超过50个字符。输出格式: 如果该算式合法,则输出运算结果;否则输出“ERROR”。题目保证结果在32位整数范围内。 示例: 输入: 1 + 2 = 输出: 3 输入: 1 + 2 * 3 + 4 = 输出: 11 输入: 1 + a * 3 + 4 = 输出: ERROR 解析: 本题考查模拟,需要考虑各种不同的情况,如输入的式子是否合法,不合法的情况有哪些,如何进行计算等。具体步骤如下: 1. 读入输入字符串,并去除多余空格。 2. 判断输入字符串是否以“=”结尾,如果是则表示输入完整,否则表示输入不完整,输出ERROR。 3. 对于输入完整的情况,分别提取出运算数和运算符,并进行相应的计算。需要注意的是,由于按照从左到右的顺序计算,所以需要判断当前运算符的优先级是否低于前一个运算符的优先级,如果是则需要先计算前一个运算符的结果。 4. 最后输出计算结果。 其中,判断运算符优先级的方法可以使用一个栈来实现。如果当前运算符的优先级低于栈顶运算符的优先级,则需要先计算栈顶运算符的结果。可以使用两个栈来实现,一个栈存储运算数,另一个栈存储运算符,具体实现见代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值