java数据结构编程问题

编程入门 行业动态 更新时间:2024-10-10 04:19:24

java<a href=https://www.elefans.com/category/jswz/34/1769880.html style=数据结构编程问题"/>

java数据结构编程问题

展开全部

/**

* 四则运算表达式计算

* @author penli

*

*/

public class Arithmetic {

public static void main(String args[]){

System.out.println(arithmetic("2.2+((3+4)*2-22)/2*3.2"));

}

public static double arithmetic(String exp){

String result = parseExp(exp).replaceAll("[\\[\\]]", "");

return Double.parseDouble(result);

}

/**

* 解析e68a84e8a2ad62616964757a686964616f31333361316131计算四则运算表达式,例:2+((3+4)*2-22)/2*3

* @param expression

* @return

*/

public static String parseExp(String expression){

//String numberReg="^((?!0)\\d+(\\.\\d+(?

expression=expression.replaceAll("\\s+", "").replaceAll("^\\((.+)\\)$", "$1");

String checkExp="\\d";

String minExp="^((\\d+(\\.\\d+)?)|(\\[\\-\\d+(\\.\\d+)?\\]))[\\+\\-\\*\\/]((\\d+(\\.\\d+)?)|(\\[\\-\\d+(\\.\\d+)?\\]))$";

//最小表达式计算

if(expression.matches(minExp)){

String result=calculate(expression);

return Double.parseDouble(result)>=0?result:"["+result+"]";

}

//计算不带括号的四则运算

String noParentheses="^[^\\(\\)]+$";

String priorOperatorExp="(((\\d+(\\.\\d+)?)|(\\[\\-\\d+(\\.\\d+)?\\]))[\\*\\/]((\\d+(\\.\\d+)?)|(\\[\\-\\d+(\\.\\d+)?\\])))";

String operatorExp="(((\\d+(\\.\\d+)?)|(\\[\\-\\d+(\\.\\d+)?\\]))[\\+\\-]((\\d+(\\.\\d+)?)|(\\[\\-\\d+(\\.\\d+)?\\])))";

if(expression.matches(noParentheses)){

Pattern patt=Patternpile(priorOperatorExp);

Matcher mat=patt.matcher(expression);

if(mat.find()){

String tempMinExp=mat.group();

expression=expression.replaceFirst(priorOperatorExp, parseExp(tempMinExp));

}else{

patt=Patternpile(operatorExp);

mat=patt.matcher(expression);

if(mat.find()){

String tempMinExp=mat.group();

expression=expression.replaceFirst(operatorExp, parseExp(tempMinExp));

}

}

return parseExp(expression);

}

//计算带括号的四则运算

String minParentheses="\\([^\\(\\)]+\\)";

Pattern patt=Patternpile(minParentheses);

Matcher mat=patt.matcher(expression);

if(mat.find()){

String tempMinExp=mat.group();

expression=expression.replaceFirst(minParentheses, parseExp(tempMinExp));

}

return parseExp(expression);

}

/**

* 计算最小单位四则运算表达式(两个数字)

* @param exp

* @return

*/

public static String calculate(String exp){

exp=exp.replaceAll("[\\[\\]]", "");

String number[]=exp.replaceFirst("(\\d)[\\+\\-\\*\\/]", "$1,").split(",");

BigDecimal number1=new BigDecimal(number[0]);

BigDecimal number2=new BigDecimal(number[1]);

BigDecimal result=null;

String operator=exp.replaceFirst("^.*\\d([\\+\\-\\*\\/]).+$", "$1");

if("+".equals(operator)){

result=number1.add(number2);

}else if("-".equals(operator)){

result=number1.subtract(number2);

}else if("*".equals(operator)){

result=number1.multiply(number2);

}else if("/".equals(operator)){

result=number1.divide(number2);

}

return result!=null?result.toString():null;

}

}

更多推荐

java数据结构编程问题

本文发布于:2024-02-13 00:03:11,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1689933.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据结构   java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!