• 大小: 5KB
    文件类型: .java
    金币: 1
    下载: 0 次
    发布日期: 2022-05-29
  • 语言: Java
  • 标签: 计算器  

资源简介

一个用Java实现的计算器小功能, 可以支持加减乘数, 以及括号运算

资源截图

代码片段和文件信息

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
 *            带括号的四则表达式
 * @return 运算结果
 */
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 {
// 如果有括弧,调用exec
// System.out.println(“exec“ + exp);
// 先找最里面的(位置 再找对应的)位置

// (-1-5)*-2)-5) 21
int rightIndex = exp.substring(leftIndex).indexOf(‘)‘) + leftIndex;

// 去独立的表达式,运算 calc(-1-5)
double res = calc(exp.substring(leftIndex + 1 rightIndex));
// 重新组织表达式
exp = exp.substring(0 leftIndex) + res
+ exp.substring(rightIndex + 1);
// -8*(((-2+4)+3)/( -6 *-2)-5)
return exec(exp);
}
// 如果没有括弧 直接调用calc

}

/**
 * 
 * @param exp
 *            不带括号的四则表达式
 * @return 运算结果
 */
public static double calc(String exp) {
// 1 . 获取所有四则运算的数字
List numbers = sliptNumbers(exp);
// 2. 获取所有四则运算的操作符号
List ops = sliptOps(exp);
// 3. 先乘车运算
// 遍历运算符中的*和/
for (int i = 0; i < ops.size(); i++) {
// * /
// 获取运算符(不移除)
char op = ops.get(i);

// 如果是 * 或者 /, 从运算符的容器中移除,同是从数字容器中到对应该运算符位置的两个数字(移除数据,后面所有数据往前顺序移动)
if (op == ‘*‘ || op == ‘/‘) {
// 从运算符的容器中移除
ops.remove(i);// 移除当前位置

// 从数字容器中获取对应该运算符位置的两个数字(移除)
double d1 = numbers.remove(i);
double d2 = numbers.remove(i);

// 运算
d1 = op == ‘*‘ ? d1 * d2 : d1 / d2;

// 把运算结果插入到数字容器中的i位置
numbers.add(i d1);// 插入到i的位置 原来从i位置一直到最后的数据,都要往后瞬移一位
// numbers.set(i d1);//设置i位置上的数据为d1其余不变
i--;// 移除后,后面所有运算符往前移动,为了保证下一个运算符不被遗漏,所以i--
}// end if (op == ‘*‘ || op == ‘/‘) {

}// end for (int i = 0 ; i < ops.size(); i++) {

// 4. 再加减运算
while (!ops.isEmpt

评论

共有 条评论