算法学习-翻译-火星计算器
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;
}
}
We only live once, and time just goes by.

浙公网安备 33010602011771号