20192306 2020-2021-1 《数据结构与面向对象程序设计》实验二报告
20192306 2020-2021-1 《数据结构与面向对象程序设计》实验二报告
课程:《程序设计与数据结构》
班级: 1923
姓名: 孙洪丽
学号: 20192306
实验教师:王志强
实验日期:2020年10月8日
必修/选修: 必修
1.实验内容
- 编写简单的计算器,完成加减乘除模运算。
- 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出。
- 编写测试代码,测试验证。(https://www.cnblogs.com/rocedu/p/4472842.html)
2. 实验过程及结果
- 计算器代码编写
import java.util.Scanner;
public class calculator {
public static void main(String[] args) {
String symbol;
Scanner scan =new Scanner(System.in);
double scan1, scan2;
char ch;
int a;
do {
a=0;
System.out.println("Please choose what do you want to do : ");
symbol=scan.next();
ch = symbol.charAt(0);
System.out.println("Please input a and b : ");
scan1=scan.nextDouble();
scan2=scan.nextDouble();
switch (ch)
{
case '+':
{System.out.println("a+b= " + (scan1+scan2));break;}
case '-':
{System.out.println("a-b= " + (scan1-scan2));break;}
case '*':
{System.out.println("a*b=" + (scan1*scan2));break;}
case '/':
{System.out.println("a/b=" + (scan1/scan2));break;}
}
System.out.println("If you want to continue,please enter 1, else enter 0.");
a = scan.nextInt();
if(a==0)
{
System.out.println("You have quit it.");
}
}while(a==1);
}
}
- 代码运行结果截图
- 测试代码编写
import junit.framework.TestCase;
import org.junit.Test;
public class calculatorTest extends TestCase {
@Test
public void testAdd() throws Exception
{
assertEquals(3,2+1);
assertEquals(56,33+23);
}
@Test
public void testSub() throws Exception
{
assertEquals(1,2-1);
assertEquals(10,33-23);
}
@Test
public void testMul() throws Exception
{
assertEquals(2,2*1);
assertEquals(759,33*23);
}
@Test
public void testDiv() throws Exception
{
assertEquals(2,2/1);
assertEquals(1,33/23);
}
}
- 运行结果截图
- 码云托管链接
https://gitee.com/besti1923/sun-hongli-20192306/commit/0a24299023b9d9ae48e129084c95a2f077a55512
https://gitee.com/besti1923/sun-hongli-20192306/commit/ecab381be4b8c5069d14f0e2370f9b4bb1947f7e
3. 实验过程中遇到的问题和解决过程
- 问题1:将所有变量都使用System.in输入,编写时出现了编译错误;
- 问题1解决方案:只保留第一个System.in输入,后面的都用scan.next...()来输入。
- 问题2:测试过程中,因为输入的项目比较多,而各项目的变量类型都不同,所以极易因为输入类型错误而造成程序中断。
- 问题2解决方案:在代码中加入一些提示性语句的输出,更加简明直观。
- 问题3:上传码云过程中,出现错误“git push rejected”,一般在终端中输入“git pull”等命令可解决问题,但是输入后虽然不显示“rejected”,但依然无法将代码上传;
- 问题3解决方案:在gitee中手动添加码云仓库,登陆连通,选择仓库时直接在IDEA内部选择。
其他(感悟、思考等)
- 本次实验抛弃了命令行,完全使用IDEA,使用起来相较于Linux命令行有明显优越性,但是下载配置插件上和连接码云上没有命令行方便,而且多次下载失败;
- IDEA在运行程序时,只要当前文件夹下有错误,就会直接报错,没有办法单独运行某一程序,所以在使用时,要确保每一个代码正确运行,或者选择建立大量文件夹分类存放(这种方式可能在上传码云时找不到文件)。
- 在定义使用“symbol”和“ch”时,尝试过只定义了一个字符型“ch”或只定义字符串“symbol”,虽然最后都失败了,但是让我重新回忆起了这些基本函数的变量类型,Java与C相似,应该回顾一下C写过的代码,重温一下基本的语法。
- 做的时候只写了计算器的代码,快到截至时间了才发现还要写一个测试代码,急忙补了一个,但不得不说用TDD写测试代码简单多了。