hyw7012

导航

java程序设计-算术表达式的运算

1、团队课程设计博客链接

洪亚文博客链接:http://www.cnblogs.com/201521123065hyw/
郑晓丽博客链接:http://www.cnblogs.com/zxl3066/

2、个人负责模块或任务说明

负责模块:运算符号的优先级比较,测试各种情况,以及计算各种运算符的结果函数;

3、自己的代码提交记录截图

         private static double Calculate(ArrayList<Double> value, String c,
			double num) {// 三角函数的计算(包括平方立方根)
		// TODO Auto-generated method stub
		// 如果遇到左括号,则直接返回当前数,例如(5)
		if (c.equals("(")) {
			return num;
		}
		if (c.equals("sin")) {
			return Math.sin(num * Math.PI / 180);
		} else if (c.equals("cos")) {
			return Math.cos(num * Math.PI / 180);
		} else if (c.equals("^")) {
			return Math.pow(value.remove(value.size() - 1), num);
		} else if (c.equals("+")) {
			return num + value.remove(value.size() - 1);
		} else if (c.equals("-")) {
			return value.remove(value.size() - 1) - num;
		} else if (c.equals("*")) {
			return value.remove(value.size() - 1) * num;
		} else
			return value.remove(value.size() - 1) / num;

	}
    private static int compare(String a, String b) {// 值为1入栈
		// TODO Auto-generated method stub
		if (a.equals(b) || (a.equals("+") && b.equals("-"))
				|| (a.equals("-") && b.equals("+"))
				|| (a.equals("*") && b.equals("/"))
				|| (a.equals("/") && b.equals("*"))) {
			return 0;
		} else if (b.equals("(")) {
			return 1;
		} else if ((a.equals("*") || a.equals("/") && !b.equals("("))) {
			return 1;
		} else if ((a.equals("*") || a.equals("/"))
				&& (b.equals("+") || b.equals("-"))) {
			return 1;
		} else if (a.equals("^")
				&& (b.equals("+") || b.equals("-") || b.equals("*") || b
						.equals("/"))) {
			return 1;
		} else {
			return 0;
		}
	}


4、自己负责模块或任务详细说明

计算函数:加减乘除还有幂方直接进行栈顶和当前数值的计算;三角函数则只需要将符号和一个数值弹出并计算。

比较函数:同级之间的运算符直接进行计算,因此返回0;
          左括号一定入栈;
   		 符号栈中左括号出现在乘除要将符号入栈,返回1。

5、课程设计感想

1、需要考虑的情况太多,还要分别考虑三角函数与平方立方的运算符
2、Math函数的原因导致后面结果会出现**.99999999这样的情况,需要格式化;
3、还有欠缺考虑的是三角函数后面紧跟括号的情况,会继续改进。

posted on 2017-06-22 19:43  hyw7012  阅读(197)  评论(0编辑  收藏  举报