软件体系结构实验二

本文介绍了如何实现一个能处理四则运算的简易翻译器,包括处理加减乘除、多操作数及错误处理。此外,还详细讲解了搭建Hadoop平台的步骤,包括配置环境变量、修改配置文件以及执行wordcount算法。

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

软件体系结构实验二

1. 实现”四则运算“的简易翻译器

1.1 要求

  • 实现加减乘除四则运算,允许同时有多个操作数,如:4+6*5-8 结果是26;
  • 被操作数为整数,整数可以有多位;
  • 处理空格;
  • 输入错误显示错误提示,并返回命令状态“CALC"。

1.2 思路

由于乘除优于加减运算,因此不妨先进行所有的乘除运算,并且将这些乘除运算后的整数值放回原来表达式的相应位置,则随后整个表达式的值,就等于一系列整数加减后的值。

基于此,我们可以用一个栈,保存这些(进行乘除运算后的)整数的值,对于加减号后的数字,将其直接压入栈中;对于乘除号后的数字,可以直接与栈顶元素进行计算,并且换栈顶元素为计算后的结果。

具体来说,遍历表达式字符串express,并用变量preSign记录每个数字之前的运算符,对于第一个数字,其之前的运算符视为加号。每次遍历到数字末尾时,根据preSign来决定计算方式:

  • 加号:将数字压入栈;
  • 减号:将数字的相反数压入栈;
  • 乘除号:计算数字与栈顶元素,并将栈顶元素替换为计算结果。

代码实现中,若读到一个运算符,或者遍历到字符串末尾,即认为是遍历到了数字末尾。处理完该数字后,更新preSign为当前遍历的字符。

遍历完表达式字符串express后,将栈中元素相加,即为该表达式的值。

import java.util.Deque;
import java.util.LinkedList;
import java.util.Scanner;

public class Main {
   
   
    public static void main(String[] args) {
   
   
        final String cmd = "CALC> ";
        Scanner in = new Scanner(System.in);
        while (true){
   
   
            System.out.print(cmd);
            String expression = in.nextLine();
            System.out.println(calculate(expression));
        }
    }
    public static int calculate(String expression) {
   
   
        //处理空格
        expression.trim();
        Deque<Integer> stack 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值