20192317 2020-2021-1 《数据结构与面向对象程序设计》实验二报告
课程:《程序设计与数据结构》
班级: 1923
姓名: 邓子彦
学号:20192317
实验教师:王志强
实验日期:2020年10月9日
必修/选修: 必修
1.实验内容
(1) 编写简单的计算器,完成加减乘除模运算。
(2) 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出。
(3) 编写测试代码,测试验证。(https://www.cnblogs.com/rocedu/p/4472842.html)
2. 实验过程及结果
码云链接:https://gitee.com/besti1923/feimao-has-no-legs.git
- 1.编写产品代码
import java.util.Scanner;
public class calculator {
public static void main(String[] args) {
System.out.println("Welcome!");
System.out.println("Please input two numbers m and n:");
Scanner input = new Scanner(System.in);
int m = input.nextInt();
int n = input.nextInt();
for(;;){
System.out.println("What kind of operations do you want?");
System.out.println("1.addition");
System.out.println("2.m minus n
3.n minus m");
System.out.println("4.m mod n
5.n mod m");
System.out.println("6.quit");
int a = input.nextInt();
calculate(m, n, a);
if(a < 1 || a > 6){
System.out.println("error!please choose again");
}
if(a == 6)
break;
}
}
public static int calculate(int x,int y,int z){
int b=0;
if(z == 1)
{
b =x+y;
System.out.println("m+n="+ (x+y));
}
if(z == 2)
{
b =x-y;
System.out.println("m-n="+ (x-y));
}
if(z == 3)
{
b =y-x;
System.out.println("n-m="+ (y-x));
}
if(z == 4)
{
b =x%y;
System.out.println("m%n="+ (x%y));
}
if(z == 5)
{
b =y%x;
System.out.println("n%m="+ (y%x));
}
return b;
}
}
- 2.编写测试代码
public class calculatorTest {
public static void main(String[] args) {
if(calculator.calculate(2,3,1) != 5)
System.out.println("test failed!");
else System.out.println("test succeed!");
if(calculator.calculate(2,3,2) != -1)
System.out.println("test failed!");
else System.out.println("test succeed!");
if(calculator.calculate(2,3,3) != 1)
System.out.println("test failed!");
else System.out.println("test succeed!");
if(calculator.calculate(2,3,4) != 2)
System.out.println("test failed!");
else System.out.println("test succeed!");
if(calculator.calculate(2,3,5) != 1)
System.out.println("test failed!");
else System.out.println("test succeed!");
}
}
3. 实验过程中遇到的问题和解决过程
- 问题1:编写计算器程序的时候,不知道测试代码该怎么写
- 问题1解决方案:按照教程上的方法走了一遍,发现教程上的情况太理想了,一切都太顺利,真正转换成自己的代码要去操作时,出现各种问题,比如测试代码不能运行(后面发现是我自己的问题)。查教程完成不了,就去问助教,问了半天助教也不知道我的想问的问题是什么,不了解我的疑惑在哪里。想了一晚上,还是没想明白,我去博客园看看其他同学写的代码,开始反思自己的程序。后面修改自己的程序代码,把函数的使用更加规范,再参照教程上然后再写测试代码,然后测试成功。
- 问题2:云班课上的idea连接码云的视频太快了,看不懂是怎么连接的码云,加上我把自己的idea设置成了汉字,所以有一些视频上的英语很难对应(一般只能对应快捷键)
- 问题2解决方案:问宿舍里会连接码云的同学,给我演示了一遍怎么上传空的文件到码云里,然后自己操作了一次把写好的计算器代码和测试代码上传到码云。
其他(感悟、思考等)
- 感悟:这次实验可以明显看出我的编程基础很差,在计算器的程序就能看出。刚开始编写的计算器程序,所有的内容都写在主函数main里面,导致刚开始测试的时候使用不了主函数main。后面修改之后把提醒和调用函数一起写在了主函数main,把计算过程独立在计算函数里面,然后测试代码那边可以调用这个计算函数进行调试。这次的实验感悟给我最大莫过于从现在开始要把自己的基础打扎实,不然一些简单的小问题能卡住特别长的时间。
- 思考:我现在觉得调试这个功能其实也不是特别厉害,我如果能想到有哪些bug会出现的话,直接在代码里面就解决了,编程序的时候想不到,写调试程序的时候也未必想得到。如果在是测试驱动开发里面,调试的作用可能会大一点,我也不清楚