算法学习-翻译-火星计算器

1.算法需求

自定义运算符#,$利用下面的计算法则,计算出一个给定的字符串表示的表达式的值,返回整型结果。

* 火星计算器:
* 自定义计算符号 # $,优先级 # $
* x#y=(2*x+y+2)
* x$y=(3*x+y*4)

 

2.实现思路

定义计算方法,进行字符串截取

3.实现代码

package com.eric;

import java.util.Scanner;

/**
 * 火星计算器:
 * 自定义计算符号 # $,优先级 # $
 * x#y=(2*x+y+2)
 * x$y=(3*x+y*4)
 *比如:2#3$1  2*2+3+2=9$1=3*9+4=31
 */
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while (sc.hasNext()){
            String inString=sc.nextLine().trim().replace(" ","");
            char[] calc_chars ={'#','$'};
            for (int i=0;i<calc_chars.length;i++){
               while (inString.indexOf(calc_chars[i])!=-1){
                   inString=compute(inString,calc_chars[i]);
               }
            }
            System.out.println(inString);

        }
    }

    /**
     * 按照规定的字符进行一次运算
     * @param inString 当前的字符串(里面包含了特殊字符,比如 23#4)
     * @param calc_char 当前发现的特殊字符(#或者$)
     * @return
     */
    private static String compute(String inString, char calc_char) {
//        先把23#4   23 # 4 都提取出来,按照规则计算,然后将计算结果替换为
        int bf_index=0,af_index=0;
        int cal_ind = inString.indexOf(calc_char);
        for (int i=cal_ind+1;i<inString.length();i++){
            if ((inString.charAt(i)!='#')&&(inString.charAt(i)!='$')){
                af_index++;
            }else if ((inString.charAt(i)=='#')||(inString.charAt(i)=='$')){
                break;
            }
        }
        for(int i=cal_ind-1;i>=0;i--){
            if ((inString.charAt(i)!='#')&&(inString.charAt(i)!='$')){
                bf_index++;
            }else if ((inString.charAt(i)=='#')||(inString.charAt(i)=='$')){
                break;
            }
        }
        String bString=inString.substring(cal_ind-bf_index,cal_ind);
        String afString=inString.substring(cal_ind+1,cal_ind+1+af_index);
        String swapString=inString.substring(cal_ind-bf_index,cal_ind+1+af_index);
        int result=0;
//        开始判断
        switch (calc_char){
            case '#': //(2*x+y+2)
                result=2*Integer.parseInt(bString)+Integer.parseInt(afString)+2;
                break;
            case '$': // x$y=(3*x+y*4)
                result=3*Integer.parseInt(bString)+Integer.parseInt(afString)*4;
                break;
            default:
                break;
        }
        inString=inString.replace(swapString,String.valueOf(result));

        return inString;
    }
}

  

posted @ 2017-07-25 15:03  酸奶加绿茶  阅读(193)  评论(0编辑  收藏  举报