软件工程第一周作业

时间:2022-03-30 19:33:54

需求分析:

      写一个自动生成小学生四则运算题的程序,要求:

      1.支持整数、真分数;

      2.允许有多个运算数和括号组成的复杂表达式;

      3.能接受用户输入并判断正误;

      4.能接受命令行参数。

 

计划估计:

      1.计划先实现两个整数间的四则运算,然后再加入真分数,最后实现多运算数和含有括号的表达式。

      2.估计大概用时4个小时,代码行大约100行左右。

 

遇到的问题:

      1.一开始实现整数的四则运算时,运算数都是用的整型;后来再加入真分数时,感觉如果整数用整型数据表示的话,没法和分数一起处理,比较麻烦,所以就把整数和分数用统一的类来表示了,整数就相当于分母为1的分数。

      2.在接收用户输入之后,原本的思路是将从结果字符串中分离出分子和分母,然后再和正确结果相比较,但是分离出数字的过程比较麻烦,所以最后决定在计算正确结果的同时,生成结果的字符串形式,然后直接与用户输入的字符串相比较。

      3.一开始我把算式类和运算数类都放在了主类里面,结果在主函数里面没法实例化算式类的对象。上百度查了一下,发现是因为算式类是一个内部类,是动态类,而主函数是静态的,所以没法实例化。解决办法有两个,一个是把内部类变成静态的,就是在定义里加入static(也是我先尝试的方法,但是出现了很多问题。。。),另一个是把内部类变成外部类(最终采用的方法)。

      4.在算式类里面,我把所有运算数存在一个number类数组里面,并用new关键字来为数组分配空间(number oprd[] = new number[100]; ),但在给数组元素循环赋值时,却发生了空指针错误,尝试了一下用循环为每个数组元素分别分配内存(for (i ...)   oprd[i] = new number();),就能成功运行了。没弄懂是为什么,查了很久也没找到原因。。。

 

代码行:

      三个文件38 + 177 + 8 = 223行。

 

性能:

      在参数都比较小的时候,程序运行速度还是比较快的,没有什么延迟,但参数非常大时有可能会卡,而且不能生成含括号的表达式。

 

总结:

      编写过程中经常更改,有一次直接把原来的代码删了重写。。。感觉是写程序之前思路不清晰的缘故,下次应该把程序要实现的功能,还有如何实现这些都事先想清楚。