加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ALGO-92--前缀表达式(并用正则扩展)

发布时间:2020-12-14 04:35:29 所属栏目:百科 来源:网络整理
导读:这道题因为格式限定所以比较简单,自己用正则表达式就给扩展了下,写成了多项匹配的代码,顺便复习了正则,测试数据少,可能有没发现的错误,如有发现请指出 点此直达扩展代码 题目 问题描述 编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值。输入

这道题因为格式限定所以比较简单,自己用正则表达式就给扩展了下,写成了多项匹配的代码,顺便复习了正则,测试数据少,可能有没发现的错误,如有发现请指出
点此直达扩展代码


题目

问题描述
  编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值。输入格式为:“运算符 对象1 对象2”,其中,运算符为“+”(加法)、“-”(减法)、“*”(乘法)或“/”(除法),运算对象为不超过10的整数,它们之间用一个空格隔开。要求:对于加、减、乘、除这四种运算,分别设计相应的函数来实现。
  输入格式:输入只有一行,即一个前缀表达式字符串。
  输出格式:输出相应的计算结果(如果是除法,直接采用c语言的“/”运算符,结果为整数)。
  输入输出样例
样例输入
+ 5 2
样例输出
7


题目要求的代码

import java.util.Scanner;

public class Main {

        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            //获得输入串
            String str = input.nextLine();
            //把输入串以空格分成数组
            String[] arr = str.split(" ");
            //提取出算术运算符
            char[] letter = arr[0].toCharArray();
            //依次计算
            switch (letter[0]){
                case '+':
                    System.out.println(Integer.parseInt(arr[1])+Integer.parseInt(arr[2]));
                    break;
                case '-':
                    System.out.println(Integer.parseInt(arr[1])-Integer.parseInt(arr[2]));
                    break;
                case '*':
                    System.out.println(Integer.parseInt(arr[1])*Integer.parseInt(arr[2]));
                    break;
                case '/':
                    System.out.println(Integer.parseInt(arr[1])/Integer.parseInt(arr[2]));
                    break;
            }
    }
}

扩展的通用代码

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/** * Created by nl101 on 2016/1/22. */
public class Main1 {
    public static void main(String[] args) {
        //测试数据((12+2)-6)/2
        String str = "/ - + 12 2 6 2";
        System.out.println(prefix(str));
    }

    private static String prefix(String str){
        //用于匹配 运算符 空格 数字 空格 数字的正则
        Pattern p = Pattern.compile("[+-*/][s]d{1,}[s]d{1,}");
        Matcher matcher = p.matcher(str);
        //开始匹配
        while (matcher.find()){
            //计算匹配的值 如,+ 12 2 则返回14
            String temp = calculate(matcher.group());
            StringBuffer sb = new StringBuffer();
            //替换上面的为计算出来的数值
            matcher.appendReplacement(sb,temp);
            //追加剩余子串
            matcher.appendTail(sb);
            str = sb.toString();
            //或者上面都注释掉用下面一句话都可以了
            // str = matcher.replaceFirst(calculate(matcher.group()));
            //递归循环
            return prefix(str);
        }
        return str;
    }

    /** * 和第一个程序一样,计算出来+ 12 2这种类型数值 * @param str * @return */
    private static String calculate(String str){
        String[] arr = str.split(" ");
        int i = 0;
        char[] letter = arr[0].toCharArray();
        switch (letter[0]){
            case '+':
                i = Integer.parseInt(arr[1])+Integer.parseInt(arr[2]);
                break;
            case '-':
                i = Integer.parseInt(arr[1])-Integer.parseInt(arr[2]);
                break;
            case '*':
                i = Integer.parseInt(arr[1])*Integer.parseInt(arr[2]);
                break;
            case '/':
                i = Integer.parseInt(arr[1])/Integer.parseInt(arr[2]);
                break;
        }
        return String.valueOf(i);
    }

}
水平不高,有好的建议欢迎留言

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读