java 2 2=5_JAVA实现5 5 5 5 5=2填运算符号,使等式成立

展开全部

挺好玩的一个东西,写着玩儿了.

用递归实现了一个, 可以e69da5e887aa3231313335323631343130323136353331333332623963自定义 5 5 5 5 ,也可以额  5 5 6 6 , 也可以 5 5 5 6 6 6

下面是代码import java.util.ArrayList;

import java.util.List;

public class TestComputeUtil {

public static void main(String[] args) {

List rightExpressions = getRightExpressions(7, 6,5,5,7);

System.out.println(rightExpressions);

}

/**

* 工具方法,得到符合期望值的四则运算表达式,如果结果集size为0,则说明没有结果

*

工具方法,得到正确的四则表达式

* @param result 期望得到的结果

* @param parameter 所有的待计算的数字 例如:6,5,5,7

* @return List  复合要求的结果,如果size为0 ,则说明没有符合结果的内容

* @throws

*/

public static List getRightExpressions(int result , int...parameter){

List resultExpressions = new ArrayList();

if(parameter == null){

return resultExpressions;

}

computeResult(resultExpressions,new StringBuilder().append(parameter[0]), result , parameter[0] , 1, parameter);

return resultExpressions;

}

/**

* 根据指针(index)的位置,来进行四则运算.

*

根据指针(index)的位置,来进行四则运算.

* @param resultExpressions 最终的结果集合,这里省事儿了,直接传进去了,当然,这种方法并不好,但省事儿,你懂得,哈哈

* @param expression 指针(index)前面所有的四则运算表达式

* @param result 期望的计算结果

* @param stepResult 指针(index)前面所有的四则运算表达式的结果

* @param index 指针位置

* @param parameter 参数数组

* @throws

*/

private static void computeResult(List resultExpressions,StringBuilder expression , int result ,Integer stepResult,int index , int[] parameter){

if(parameter.length >= index+1){

computeResult(resultExpressions, expression, result, stepResult, index, parameter, CalculationSymbols.ADD);

computeResult(resultExpressions, expression, result, stepResult, index, parameter, CalculationSymbols.SUB);

computeResult(resultExpressions, expression, result, stepResult, index, parameter, CalculationSymbols.MULT);

computeResult(resultExpressions, expression, result, stepResult, index, parameter, CalculationSymbols.DIV);

}else {

if(result == stepResult){

resultExpressions.add(expression.toString());

}

}

}

/**

*   一个计算流程包括递归调用computeResult(List resultExpressions,StringBuilder expression , int result ,Integer stepResult,int index , int[] parameter)这个方法

*

一个计算流程 , 在这里加减乘除都是一个完整的计算流程.如果以后还想增加别的运算符号的话,只需要修改一下计算方法,以及枚举类.便于扩充

* @param resultExpressions

* @param expression

* @param result

* @param stepResult

* @param index

* @param parameter

* @param sign void

* @throws

*/

private static void computeResult(List resultExpressions,StringBuilder expression , int result ,Integer stepResult,int index , int[] parameter , CalculationSymbols sign){

StringBuilder newExpression = new StringBuilder(expression);

int newResult = computeResult(stepResult, parameter[index], sign, newExpression);

computeResult(resultExpressions, newExpression, result, newResult, index+1, parameter);

}

/**

* 计算

*

计算

* @param left

* @param right

* @param sign

* @return int

* @throws

*/

private static int computeResult(int left , int right , CalculationSymbols sign, StringBuilder expression){

switch (sign) {

case ADD:

expression.append("+").append(right);

return left + right;

case SUB:

expression.append("-").append(right);

return left - right;

case MULT:

expression.append("*").append(right);

return left * right;

case DIV:

expression.append("/").append(right);

return left / right;

default:

throw new UnsupportedOperationException("不支持的操作类型!");

}

}

}

/**

* 计算符号枚举

*

计算符号枚举

* @author an

* @version V1.0

*/

enum CalculationSymbols{

ADD,SUB,MULT,DIV

}

额,刚看到了一个问题,是这样的,不能用Integer , 需要把所有的Integer给替换成为Double,因为,1/2 = 0 ,你懂的..只需要修改参数类型,以及计算的地方,即可

手打~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值