整数型加减乘除四则混合运算

没有使用递归方法,根据一个完整公式计算对应结果,目前水平有限,显得比较繁琐的感觉,很多都是一步一步测试改进出来的,不知道还有么有BUG。

如果有好的改进,多多指教!

/**
 * 整形正数加减混合
 */
import java.util.Arrays;
import java.util.Scanner;


public class Counter {

public static int counterSum(String str) {
int sum = 0;
String regex ="\\+-|\\--|\\*-|\\*|\\/-|\\-|\\+|\\/";
String[] arr = str.startsWith("-")? str.substring(1).split(regex): str.split(regex);
String[] arrOp = str.split("[\\d]+");
System.out.println(Arrays.toString(arrOp));
int[] arrNum = new int[arr.length];
arrNum[0] = str.startsWith("-")? Integer.parseInt(arr[0])*-1:
Integer.parseInt(arr[0]);
for(int i =1; i<arr.length; i++){
if("*-".equals(arrOp[i])||"/-".equals(arrOp[i])
||"+-".equals(arrOp[i])||"--".equals(arrOp[i])){
arrNum[i] = Integer.parseInt(arr[i])*-1;
arrOp[i]=arrOp[i].substring(0, 1);
}else
arrNum[i] = Integer.parseInt(arr[i]);
}

if (str.indexOf("*") != -1 || str.indexOf("/") != -1) {
for (int i = 1; i < arrOp.length; i++) {
switch (arrOp[i]) {
case "*":
sum = arrNum[i - 1] * arrNum[i];
arrOp[i] = i>1?arrOp[i-1]:"+";
arrNum[i - 1] = 0;
arrNum[i] = sum;
break;
case "/":
sum = arrNum[i - 1] / arrNum[i];
arrOp[i] = i>1?arrOp[i-1]:"+";
arrNum[i - 1] = 0;
arrNum[i] = sum;
break;
}
}
}
sum = arrNum[0];
for (int i = 1; i < arrOp.length; i++) {
switch (arrOp[i]) {
case "+":
sum += arrNum[i];
break;
case "-":
sum -= arrNum[i];
break;
}
}
return sum;
}


public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入计算方程式:");
String str = sc.nextLine();
String str0 = str;
sc.close();
while(str.indexOf("(")!=-1){
int indexEnd = str.indexOf(")");
int indexStr = str.lastIndexOf("(", indexEnd);
String strIn = str.substring(indexStr+1, indexEnd);
int sum = counterSum(strIn);
strIn = String.valueOf(sum);
StringBuffer strb = new StringBuffer(str);
strb.replace(indexStr, indexEnd+1, strIn);
str = strb.toString();
}
int sum = counterSum(str);
System.out.println(str0+"="+sum);
}


}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值