• Java程序设计-表达式运算(个人博客)


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

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

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

    负责模块:整个表达式的计算流程
    

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

    for (int i = 0; i < array.length; i++) {
    			for(int k=i;array[k] >= '0' && array[k] <= '9';k++,i++) {
    				String tmpString = array[i]+"";
    				System.out.println(tmpString);
    				numberStr.add(tmpString);//不能强制转换为double,原本的number为double类型的,因此char型的array不能直接
    				//在前面加double强制转换
    			}           
    			if (numberStr.size() > 0) {// 通过判断存放数值的数组大小间接判断是否为数字;
    				for (String string : numberStr) {
    					numberDou.add((double) Integer.parseInt(string));
    				}
    				for (int j = numberDou.size()-1; j >= 0; j--) {
    					num +=numberDou.get(j) * Math.pow(10,(numberDou.size() - j-1));//超出范围的错误,number.get(j)改为j-1
    					//System.out.println(num);
    				}
    				value.add(num);
    				numberStr = null;
    				numberDou = null;
    				if (mark == 1) {
    					num = Calculate(sign, value, sign.pop(), num);
    					mark = 0;
    				}else if (i == array.length) {
    					num = Calculate(sign, value, sign.pop(), value.remove(value.size()-1));
    					// ///计算结果出来了!!!!!!!
    				}
    			} else {
    				if (array[i] == 's') {
    					if (array[i + 1] == 'i' && array[i + 2] == 'n') {
    						i = i + 2;// 原本应该为+3,但是跳出循环后还有一个自增;
    						sign.push("sin");
    						mark = 1;
    						continue;
    					} else {
    						String s = "Wrong Expression";
    						System.out.println(s);
    						break;
    					}
    				} else if (array[i] == 'c') {
    					if (array[i + 1] == 'o' && array[i + 2] == 's') {
    						i = i + 2;// 原本应该为+3,但是跳出循环后还有一个自增;
    						sign.push("cos");
    						mark = 1;
    						continue;
    					} else {
    						String s = "Wrong Expression";
    						System.out.println(s);
    						break;
    					}
    				} else if (array[i] == '^') {
    					sign.push("^");
    					mark = 1;
    					continue;
    				} else if (array[i] == '(') {
    					sign.push("(");
    				} else if (array[i] == ')') {
    					if (array[i - 1] == '(') {
    						sign.pop();
    						if (mark == 1) {// 考虑^()情况,mark为1证明前一个是可直接计算的符号(sin,cos,^)
    							num = Calculate(sign, value, sign.pop(), value.remove(value.size()-1));
    							value.add(num);
    							continue;
    						}
    						continue;
    					}
    					num = Calculate(sign, value, sign.pop(), value.remove(value.size()-1));
    					value.add(num);// (90*(sin80+99)-66)/7
    					sign.pop();
    				} else if (array[i] == '+' || array[i] == '-'
    						|| array[i] == '*' || array[i] == '/') {
    					if (sign.empty()) {
    						sign.push(array[i] + "");
    					} else if (compare(array[i] + "", sign.peek()) == 1) {//
    						sign.push(array[i] + "");
    					} else {
    						num = Calculate(sign, value, sign.pop(), value.remove(value.size()-1));
    						value.add(num);
    					}
    				}
    			}
    
    			}
    	}
    

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

           遇到数值时进数值栈,运算符则进行优先级比较,第一个运算符一定入栈,后来的与之前的比较,当前的优先级比较大时
    入栈,当前的小于或等于前面的,弹出前一个运算符和两个操作数进行运算,然后再入栈。当遇到括号的时候,左括号入栈
    遇右括号时,当前面一个符号栈栈顶不是左括号时继续往前计算,知道栈顶元素为左括号,弹出左括号。接着判断,若此时
    栈还不为空,接着运算
    

    5、课程设计感想

    课程设计很锻炼人,应该在平时就多积累;
    我们的代码功能还不够强大,有待改进
    
  • 相关阅读:
    Oracle 用 sqlprompt 修改 sqlplus 提示符
    Oracle cursor pin S wait on X 等待事件 说明
    Oracle 利用 rowid 提升 update 性能
    Oracle 从缓存里面查找真实的执行计划
    Linux 进程状态 说明
    Oracle 用户 对 表空间 配额(quota ) 说明
    Upon startup of Linux database get ORA27102: out of memory LinuxX86_64 Error: 28: No space left on device
    异常宕机 Ora00600 [Kccpb_sanity_check_2] 错误解决方法
    Oracle ORA04031 错误 说明
    Oracle Shared pool 详解
  • 原文地址:https://www.cnblogs.com/zxl3066/p/7067000.html
Copyright © 2020-2023  润新知