按照顺序四则运算


package test;

import java.util.Scanner;

/**
*
* 2017年4月22日
*
9 1 - 4 / 4 - 1 * 2
5 9 + 2 * 5
5 5 * -2 + 2
13 9 * ( 7 + 3 ) / ( 2 + 2 )

#1 -4
#2 55
#3 -8
#4 22
*/
public class Solution05 {
static boolean logger=false;
public static void main(String[] args) {
//String str="9 1 - 4 / 4 - 1 * 2";
//System.out.println(process("9 * ( 7 + 3 ) / ( 2 + 2 )"));

Scanner sc=new Scanner(System.in);
int test_case=4;
int result[]=new int[test_case];
for(int t=0;t<test_case;t++){
int size=sc.nextInt();
String str=sc.nextLine();
result[t]=process(str);
}
for(int t=0;t<test_case;t++){
System.out.println("#"+(t+1)+" "+result[t]);

}
sc.close();
}


public static int process(String str){
while(str.indexOf("(") >-1){//有括号

int startIndex=str.indexOf("(");//找到括号的开始
int endIndex=str.indexOf(")");//找到括号的结束
if(logger) System.out.println(str+" => "+startIndex+ " "+endIndex );


String frontString=str.substring(0,startIndex);
String middleString=str.substring(startIndex+2, endIndex-1);//开始要跳过左括号和空格,所以要加2,结束不需要括号,所以要减1
String endString=str.substring(endIndex+1,str.length());//结束要从右括号后+1

if(logger) System.out.println(middleString);
str=frontString+processPlain(middleString)+endString;
}
return processPlain(str);
}

/**
* 只处理不带括号的
* @param str
* @return
*/
public static int processPlain(String str){
str=str.trim();
String[] strArray=str.split(" ");
double result=0;
for(int i=0;i<strArray.length;i=i+2){//每次接收两个

String sope;//操作符
double snum;//操作后紧跟的数字
if(i==0){
sope="+";
snum=Double.parseDouble(strArray[i]);
i--;//第一个不要操作符,要回退下

}else{
sope=strArray[i];
snum=Double.parseDouble(strArray[i+1]);
}
result=operate(result,sope,snum);
}

return (int)result;
}

private static double operate(double result, String sope, double snum) {
if("+".equals(sope)){
result=result+snum;
}else if("-".equals(sope)){
result=result-snum;
}else if("*".equals(sope)){
result=result*snum;
}else if("/".equals(sope)){
result=result/snum;
}
result=Math.floor(result);
return result;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值