java小程序四则运算测试,【练习】四则运算计算器小程序

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

把代码优化了下(ps:尽量的减少了冗余度)并添加了注释,顺便强化了下功能,现在可以实现识别括号,加减乘除,还有次方

public class Three {

public static void main(String[] args) {

caculatorPlus("3+(5*(2+6)+1)-2");

caculatorPlus("1+2*3-4");

caculatorPlus("60/3-8/4+5");

caculatorPlus("5*(2+6)+1+(2+4)/2");

caculatorPlus("5*(2+6)/+1+(2+4)/2");

caculatorPlus("1+2*3^2-4");

caculatorPlus("1+(2*3)^2-4*(5+6)");

}

/**

* 能识别括号的计算器

* @param str 字符串表达式

*/

public static void caculatorPlus(String str){

String strTemp="";

StringBuffer bfTemp=new StringBuffer(str);//处理str的过渡StringBuffer变量

int count=str.length()-str.replace("(", "").length();//记录括号数

int leftIndex=0;//记录左括好的位置

int rightIndex=0;//记录右括好的位置

//防止输入异常

try{

//遍历所有括号的内容

for(int j=1;j<=count;j++){

//获取最内层的左括号位置

for(int i=bfTemp.length()-1;i>=0;i--){

if(bfTemp.charAt(i)=='('){

leftIndex=i;

break;

}

}

//获取最内层的右括号位置

for(int i=leftIndex+1;i

if(bfTemp.charAt(i)==')'){

rightIndex=i;

break;

}

}

strTemp=caculator(bfTemp.substring(leftIndex+1, rightIndex));//调用无括号计算器

bfTemp=bfTemp.replace(leftIndex, rightIndex+1,strTemp);//将算出来的结果替换相应部分

}

str=caculator(bfTemp.toString());//计算非括号的内容

System.out.println(str);

}catch(Exception e){

System.out.println("您的输入非法!");

}

}

/**

* 无法识别括号的计算器

* @param str 字符串表达式

*/

public static String caculator(String str){

str=prior(str,"\\^");//计算次方

str=prior(str,"[*|/]");//计算乘除

str=prior(str,"[+|\\-]");//计算加减

return str;

}

/**

* 处理算术运算

* @param str 表达式字符串

* @param sign 所要计算的运算符

* @return

*/

public static String prior(String str,String sign){

int result=0;

String singleSign=null;//取出运算符号

int a,b;

int count=str.length()-str.replaceAll(sign, "").length();//记录有多少个次方号

Pattern p=Pattern.compile("\\d*["+sign+"]\\d*");

Matcher m=null;

for(int i=1;i<=count;i++){

m=p.matcher(str);

//寻找最左边的运算式

if(m.find()){

singleSign=m.group().replaceAll("\\d*","");

a=Integer.parseInt(m.group().split("[+|\\-|*|/|\\^]")[0]);

b=Integer.parseInt(m.group().split("[+|\\-|*|/|\\^]")[1]);

switch (singleSign){

case "+":

result=a+b;

break;

case "-":

result=a-b;

break;

case "/":

result=a/b;

break;

case "*":

result=a*b;

break;

case "^":

result=(int)Math.pow(a, b);

break;

}

}

str=str.replaceFirst("\\d*["+sign+"]\\d*", result+"");//将计算好的结果替换该部分运算式

}

return str;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值