在第三次实验的基础上,teacher又对此提出了新的要求,实现网页版或安卓的四则运算。
结对开发的伙伴:
博客名:Mr.缪
姓名:缪金敏
链接:http://www.cnblogs.com/miaojinmin799/
详细网页四则运算要求:
1、生成的题目中计算过程不能产生负数,也就是说算术表达式中如果存在e1-e2的子表达式,那么结果大于等于0;
2、生成的题目中如果存在形式如e1/e2的子表达式,那么其结果应该是真分数。
3、每道题目中出现的运算符个数不超过3个,括号不做详细要求。
问题分析:
在第三次实验的基础上,要求把C++语言转换成java语言,即把cpp文件程序转换为java,jsp文件。但由于C和java在全局变量和栈的应用上有一定的不同,在对栈的使用中由于出栈和读取栈顶元素都为Object对象转换起来比较麻烦,所以我们在原先cpp文件中栈的应用改成了数组来实现压栈入栈。因为是网页版的所以就会使用jsp,html与java文件之间的数据交换,我们通过session,request和调用返回函数等方法来实现数据交互。
所遇困难:
1、在使用java中的栈时,出栈元素难以转换为所要类型。
2、jsp之间传递数组返回nill.
3、jsp与java之间的数据交互。
解决办法:
1、因为是顺序栈,所以直接使用数组来实现栈的所有功能
2、使用session来传递数组
3、在class文件中书写一个返回函数,在new生成对象时自动传递数组
前cpp文件:
1 #include<iostream>
2 #include<string>
3 #include<sstream>
4 #include<time.h>
5 #include<iomanip>
6 #include<fstream>
7 #define MAX 100
8 using namespace std;
9
10 stringstream formula; //当前算式
11 string buffer[MAX]; //缓冲区数组
12 int TopNumber; //上限
13 int BaseNumber; //下限
14 int IsMulDlvExist; //是否有乘除
15 int Amount; //操作数的个数
16 int BracketNum; //括号个数
17 int LBraket[2]; //左括号的位置
18 int RBraket[2]; //右括号的位置
19 int IsNeg; //是否有负数
20 int IsRem; //是否有余数
21 int IsBra; //是否有括号
22 int IsRep; //是否重复
23 float Result[MAX]; //正确结果数组
24 char lastOp; //记录上个运算符是否为除号
25
26 //优先级数组
27 char prior[7][7] = {
28 { '>', '>', '<', '<', '<', '>', '>' },
29 { '>', '>', '<', '<', '<', '>', '>' },
30 { '>', '>', '>', '>', '<', '>', '>' },
31 { '>', '>', '>', '>', '<', '>', '>' },
32 { '<', '<', '<', '<', '<', '=', ' ' },
33 { '>', '>', '>', '>', ' ', '>', '>' },
34 { '<', '<', '<', '<', '<', ' ', '=' }
35 };