将字符串"5-8-2*5+9*3*2-7"的值计算出来

本文介绍如何计算包含小于10数字的加减乘法运算字符串。首先将字符串转为字符数组,考虑乘法优先级,用列表保存乘法运算结果,然后转换回字符串数组并遍历计算最终结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给一个字符串,里面是小于10的数字的加减乘法运算,将结果输出到控制台

代码:
import org.junit.Test;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;

public class test {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str= scanner.nextLine();
        //String str = "5-8-2*5+9*3*2-7";
        char[] chars = str.toCharArray();

        int pro;
        ArrayList list = new ArrayList();

        for (int i =0;i<chars.length;i++) {
            //System.out.println(chars[i]);
            list.add(chars[i]);
            if (chars[i] == '*') {
                int num1 = Integer.parseInt(chars[i + 1] + "");
                //这里用list.size是因为当9*3*2,运算完9*3后,chars[i-1]是3,而list.size-2是:27
                int num2 = Integer.parseInt(list.get(list.size() - 2) + "");
                list.remove(list.size() - 1);
                list.remove(list.size() - 1);

                pro = num1 * num2;

                list.add(pro);
                i++;
            }
        }

        String[]  arr = new String[list.size()];
        Iterator iterator = list.iterator();
        int index = 0;
        while (iterator.hasNext()){
            arr[index] = iterator.next()+"";
            index++;
        }
        list.clear();
        int sum = 0;
		sum = Integer.parseInt(arr[0]);
        for (int j = 0;j<arr.length;j++){
            /*if (arr[j].equals("+")&&j==1){
                int num1 = Integer.parseInt(arr[j+1]);
                int num2 = Integer.parseInt(arr[j-1]);
                sum = num1+num2;
            }else if (arr[j].equals("-")&&j==1){
                int num1 = Integer.parseInt(arr[j+1]);
                int num2 = Integer.parseInt(arr[j-1]);
                sum = num2-num1;
            }else */if (arr[j].equals("+")&&j>1){
                sum += Integer.parseInt(arr[j+1]);
            }else if (arr[j].equals("-")&&j>1){
                sum -= Integer.parseInt(arr[j+1]);
            }
        }
        System.out.println(sum);
    }


}

解题思路
  1. 先将字符串转换为字符数组toCharArray();
  2. 因为乘法的优先级高,新建一个list,用于保存乘法运算后的字符串:
 		int pro;
        ArrayList list = new ArrayList();

        for (int i =0;i<chars.length;i++) {
            //System.out.println(chars[i]);
            list.add(chars[i]);
            if (chars[i] == '*') {
                int num1 = Integer.parseInt(chars[i + 1] + "");
                //这里用list.size是因为当9*3*2,运算完9*3后,chars[i-1]是3,而list.size-2是:27
                int num2 = Integer.parseInt(list.get(list.size() - 2) + "");
                list.remove(list.size() - 1);
                list.remove(list.size() - 1);

                pro = num1 * num2;

                list.add(pro);
                i++;
            }//运算完乘法部分后的结果[5, -, 8, -, 10, +, 54, -, 7]
  1. 新建一个数组,将list的结果集转换为字符串,并保存再数组中
  2. 对数组进行遍历,新建一个int,用于统计结果
  3. 将arr[0]的值赋给该值
  4. 遍历数组,与后面的数字相加减,得出最终结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值