當前位置:編程學習大全網 - 編程語言 - JAVA實現5 5 5 5 5=2填運算符號,使等式成立

JAVA實現5 5 5 5 5=2填運算符號,使等式成立

挺好玩的壹個東西,寫著玩兒了.

用遞歸實現了壹個, 可以自定義 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<String>?rightExpressions?=?getRightExpressions(7,?6,5,5,7);

System.out.println(rightExpressions);

}

/**?

?*?工具方法,得到符合期望值的四則運算表達式,如果結果集size為0,則說明沒有結果?

?*

?*?<p>工具方法,得到正確的四則表達式</p>

?*?@param?result?期望得到的結果

?*?@param?parameter?所有的待計算的數字?例如:6,5,5,7

?*?@return?List<String>?復合要求的結果,如果size為0?,則說明沒有符合結果的內容

?*?@throws?

?*/?

public?static?List<String>?getRightExpressions(int?result?,?int...parameter){

List<String>?resultExpressions?=?new?ArrayList<String>();

if(parameter?==?null){

return?resultExpressions;?

}

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

return?resultExpressions;

}

/**?

?*?根據指針(index)的位置,來進行四則運算.?

?*

?*?<p>根據指針(index)的位置,來進行四則運算.</p>

?*?@param?resultExpressions?最終的結果集合,這裏省事兒了,直接傳進去了,當然,這種方法並不好,但省事兒,妳懂得,哈哈

?*?@param?expression?指針(index)前面所有的四則運算表達式

?*?@param?result?期望的計算結果

?*?@param?stepResult?指針(index)前面所有的四則運算表達式的結果

?*?@param?index?指針位置

?*?@param?parameter?參數數組

?*?@throws?

?*/?

private?static?void?computeResult(List<String>?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<String>?resultExpressions,StringBuilder?expression?,?int?result?,Integer?stepResult,int?index?,?int[]?parameter)這個方法

?*

?*?<p>壹個計算流程?,?在這裏加減乘除都是壹個完整的計算流程.如果以後還想增加別的運算符號的話,只需要修改壹下計算方法,以及枚舉類.便於擴充</p>

?*?@param?resultExpressions?

?*?@param?expression

?*?@param?result

?*?@param?stepResult

?*?@param?index

?*?@param?parameter

?*?@param?sign?void

?*?@throws?

?*/?

private?static?void?computeResult(List<String>?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);

}

/**

?*?計算?

?*

?*?<p>計算</p>

?*?@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("不支持的操作類型!");

}

}

}

/**?

*?計算符號枚舉

*?

*?<p>計算符號枚舉</p>?

*?@author?an?

*?@version?V1.0?

*/?

enum?CalculationSymbols{

ADD,SUB,MULT,DIV

}

額,剛看到了壹個問題,是這樣的,不能用Integer , 需要把所有的Integer給替換成為Double,因為,1/2 = 0 ,妳懂的..只需要修改參數類型,以及計算的地方,即可

手打~~

  • 上一篇:g4studio的數據流圖
  • 下一篇:cpu是什麽意思啊?
  • copyright 2024編程學習大全網