資源簡介
一個用Java實(shí)現(xiàn)的計(jì)算器小功能, 可以支持加減乘數(shù), 以及括號運(yùn)算
代碼片段和文件信息
import?java.util.ArrayList;
import?java.util.List;
import?java.util.StringTokenizer;
public?class?CalcDemo?{
/**
?*?@param?args
?*/
public?static?void?main(String[]?args)?{
System.out.println(exec(“-8*(((-2+4)+3)/((-1-5)*-2)-5)“));
}
/**
?*?
?*?@param?exp
?*????????????帶括號的四則表達(dá)式
?*?@return?運(yùn)算結(jié)果
?*/
public?static?double?exec(String?exp)?{
//?有括號
//?-8*(((-2+4)+3)/((-1-5)*-2)-5)
int?leftIndex?=?exp.lastIndexOf(‘(‘);?//?16
if?(leftIndex?==?-1)?{
//?沒有括號
//?System.out.println(“calc“?+?exp);
return?calc(exp);
}?else?{
//?如果有括弧,調(diào)用exec
//?System.out.println(“exec“?+?exp);
//?先找最里面的(位置?再找對應(yīng)的)位置
//?(-1-5)*-2)-5)?21
int?rightIndex?=?exp.substring(leftIndex).indexOf(‘)‘)?+?leftIndex;
//?去獨(dú)立的表達(dá)式,運(yùn)算?calc(-1-5)
double?res?=?calc(exp.substring(leftIndex?+?1?rightIndex));
//?重新組織表達(dá)式
exp?=?exp.substring(0?leftIndex)?+?res
+?exp.substring(rightIndex?+?1);
//?-8*(((-2+4)+3)/(?-6?*-2)-5)
return?exec(exp);
}
//?如果沒有括弧?直接調(diào)用calc
}
/**
?*?
?*?@param?exp
?*????????????不帶括號的四則表達(dá)式
?*?@return?運(yùn)算結(jié)果
?*/
public?static?double?calc(String?exp)?{
//?1?.?獲取所有四則運(yùn)算的數(shù)字
List?numbers?=?sliptNumbers(exp);
//?2.?獲取所有四則運(yùn)算的操作符號
List?ops?=?sliptOps(exp);
//?3.?先乘車運(yùn)算
//?遍歷運(yùn)算符中的*和/
for?(int?i?=?0;?i? //?*?/
//?獲取運(yùn)算符(不移除)
char?op?=?ops.get(i);
//?如果是?*?或者?/,?從運(yùn)算符的容器中移除,同是從數(shù)字容器中到對應(yīng)該運(yùn)算符位置的兩個數(shù)字(移除數(shù)據(jù),后面所有數(shù)據(jù)往前順序移動)
if?(op?==?‘*‘?||?op?==?‘/‘)?{
//?從運(yùn)算符的容器中移除
ops.remove(i);//?移除當(dāng)前位置
//?從數(shù)字容器中獲取對應(yīng)該運(yùn)算符位置的兩個數(shù)字(移除)
double?d1?=?numbers.remove(i);
double?d2?=?numbers.remove(i);
//?運(yùn)算
d1?=?op?==?‘*‘???d1?*?d2?:?d1?/?d2;
//?把運(yùn)算結(jié)果插入到數(shù)字容器中的i位置
numbers.add(i?d1);//?插入到i的位置?原來從i位置一直到最后的數(shù)據(jù),都要往后瞬移一位
//?numbers.set(i?d1);//設(shè)置i位置上的數(shù)據(jù)為d1其余不變
i--;//?移除后,后面所有運(yùn)算符往前移動,為了保證下一個運(yùn)算符不被遺漏,所以i--
}//?end?if?(op?==?‘*‘?||?op?==?‘/‘)?{
}//?end?for?(int?i?=?0?;?i?
//?4.?再加減運(yùn)算
while?(!ops.isEmpt
評論
共有 條評論