2018-2019-2 20175126谢文航 实验二《Java面向对象程序设计》实验报告
一、实验报告封面
- 课程:Java程序设计 班级:1751 班 姓名:谢文航 学号:20175126
- 指导教师:娄嘉鹏 实验日期:2019年4月17日
- 实验时间:--- 实验序号:实验二
- 实验名称:Java开发环境的熟悉
- 实验题目:
- 实验要求:
- 完成实验二《Java面向对象程序设计》中的内容
- 其中Eclipse相关的内容参考Intellj IDEA 简易教程换成IDEA实现
- 参考实验二《Java面向对象程序设计》的一点说明,完成云班课中的检查点,也可以先完成实验报告,直接提交。注意不能只有截图,要有知识点,原理,遇到的问题和解决过程等说明。实验报告中一个检查点要有多张截图。
- 发表实验报告博客,标题“学期(如2018-2019-2) 学号(如20175300)实验二《Java面向对象程序设计》实验报告”
二、实验内容
(一)单元测试
(1) 三种代码: 伪代码、产品代码、测试代码。
伪代码与具体编程语言无关,伪代码从意图层面来解决问题,最终,伪代码是产品代码最自然的、最好的注释。
伪代码:
百分制转五分制:
如果成绩小于60,转成“不及格”
如果成绩在60与70之间,转成“及格”
如果成绩在70与80之间,转成“中等”
如果成绩在80与90之间,转成“良好”
如果成绩在90与100之间,转成“优秀”
其他,转成“错误”
产品代码:
public class MyUtil {
public static String percentage2fivegrade(int grade) {
if (grade < 0)
return "错误";
else if(grade<60){
return "不及格";
}
else if(grade<70){
return "及格";
}
else if(grade<80){
return "中等";
}
else if (grade<90){
return "良好";
}
else if (grade<=100){
return "优秀";
}
else
return "错误";
}
}
测试代码:
测试代码:
import junit.framework.TestCase;
import org.junit.Test; public class MyUtilTest extends TestCase {
@Test
public void testNormal() {
assertEquals("不及格", MyUtil.percentage2fivegrade(55));
assertEquals("及格", MyUtil.percentage2fivegrade(65));
assertEquals("中等", MyUtil.percentage2fivegrade(75));
assertEquals("良好", MyUtil.percentage2fivegrade(85));
assertEquals("优秀", MyUtil.percentage2fivegrade(95));
}
@Test
public void testException(){
assertEquals("错误",MyUtil.percentage2fivegrade(-55));
assertEquals("错误",MyUtil.percentage2fivegrade(115));
}
@Test
public void testBoundary(){
assertEquals("不及格",MyUtil.percentage2fivegrade(0));
assertEquals("及格",MyUtil.percentage2fivegrade(60));
assertEquals("中等",MyUtil.percentage2fivegrade(70));
assertEquals("良好",MyUtil.percentage2fivegrade(80));
assertEquals("优秀",MyUtil.percentage2fivegrade(90));
assertEquals("优秀",MyUtil.percentage2fivegrade(100));
}
}
具体流程:在IDEA中打开一个项目,并打开其测试项,插入代码
但是一般刚插进去的时候,test部分会是红色的,这需要我们先插入Junit包:
首先用everthing找到junit.jar的位置:
然后插入junit.jar:
接下来根据要求补充完整后,运行,看是否结果符合预期。
最终运行测试图:
(二)TDD(Test Driven Devlopment, 测试驱动开发)
- 一般步骤
- 明确当前要完成的功能,记录成一个测试列表
- 快速完成编写针对此功能的测试用例
- 测试代码编译不通过(没产品代码呢)
- 编写产品代码
- 测试通过
- 对代码进行重构,并保证测试通过(重构下次实验练习)
- 循环完成所有功能的开发
产品代码
public class StringBufferDemo {
public static void main(String [] args){
StringBuffer buffer = new StringBuffer();
buffer.append('S');
buffer.append("tringBuffler");
System.out.println(buffer.charAt(1));
System.out.println(buffer.indexOf("tring"));
System.out.println("buffer = "+buffer.toString());
}
}
测试代码
import junit.framework.TestCase;
import org.junit.Test; public class StringBufferDemoTest extends TestCase {
StringBuffer a = new StringBuffer("StringBuffer");
StringBuffer b = new StringBuffer("StringBufferStringBuffer");
StringBuffer c = new StringBuffer("StringBufferStringBufferStringBuffer");
@Test
public void testcapacity() throws Exception{
assertEquals(28,a.capacity());
assertEquals(40,b.capacity());
assertEquals(52,c.capacity());
}
@Test
public void testcharAt() throws Exception{
assertEquals('S',a.charAt(0));
assertEquals('g',a.charAt(5));
assertEquals('r',a.charAt(11));
}
@Test
public void testlength() throws Exception{
assertEquals(12,a.length());
assertEquals(24,b.length());
assertEquals(36,c.length());
}
@Test
public void testindexOf() throws Exception{
assertEquals(0,a.indexOf("Str"));
assertEquals(5,a.indexOf("gBu"));
assertEquals(7,a.indexOf("uff"));
} }
照例,创建好StringBufferDemo.java后,创建一个test:
测试结果运行图:
(三)任务三:对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式
产品代码
abstract class Data{
public abstract void DisplayValue();
}
class Integer extends Data {
int value;
Integer(){
value=100;
}
public void DisplayValue(){
System.out.println(value);
}
}
class Boolean extends Data {
boolean value;
Boolean() {
value=true;
}
public void DisplayValue(){
System.out.println (value);
}
}
class Document {
Data pd,qw;
Document() {
pd=new Integer();
qw=new Boolean();
}
public void DisplayData(){
pd.DisplayValue();
qw.DisplayValue();
}
}
public class MyDoc {
static Document d;
public static void main(String[] args) {
d = new Document();
d.DisplayData();
}
}
首先我们根据要求算一下自己应该做第几题:26%2=2,所以做第二题:
- 2:让系统支持Boolean类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
要想输出Boolean,就必须要先添加一个Boolean的小类,可以依葫芦画瓢,根据上面Integer的内容写出Boolean的代码:
最后再在输出的Document类上加上刚才增加的内容:
class Document {
Data pd,qw;
Document() {
pd=new Integer();
qw=new Boolean();
}
public void DisplayData(){
pd.DisplayValue();
qw.DisplayValue();
}
}最终运行结果图,符合预期:
(四)任务四:以TDD的方式开发一个复数类Complex
产品代码
import static java.lang.Math.sqrt; public class MyComplex {
double realpart,imagepart;
public MyComplex(double R,double I){
realpart=R;
imagepart=I;
}
public double getRealPart(){
return realpart;
}
public double getImagePart(){
return imagepart;
}
public MyComplex Complexjiafa(MyComplex a){
return new MyComplex((realpart+a.realpart),imagepart+a.imagepart);
}
public MyComplex Complexjianfa(MyComplex a){
return new MyComplex((realpart-a.realpart),imagepart-a.imagepart);
}
public MyComplex Complexchengfa(MyComplex a){
return new MyComplex((realpart*a.realpart-imagepart*a.imagepart),realpart*a.imagepart+imagepart*a.realpart);
}
public MyComplex Complexchufa(MyComplex a){
double d = sqrt(a.realpart*a.realpart)+sqrt(a.imagepart*a.imagepart);
double e = (realpart*a.imagepart-imagepart*a.realpart);
return new MyComplex((realpart*a.realpart+imagepart*a.imagepart)/d,imagepart/a.imagepart);
}
public static void main(String args[]){
MyComplex w = new MyComplex(2,10);
MyComplex e = new MyComplex(1,3);
MyComplex a = new MyComplex(4,5);
MyComplex b = new MyComplex(3,7);
a.Complexjiafa(b);
System.out.println("("+a.realpart+"+"+a.imagepart+"i)+("+b.realpart+"+"+b.imagepart+"i)="+a.Complexjiafa(b).realpart+"+"+a.Complexjiafa(b).imagepart+"i");
System.out.println("("+a.realpart+"+"+a.imagepart+"i)-("+e.realpart+"+"+e.imagepart+"i)="+a.Complexjianfa(e).realpart+"+"+a.Complexjianfa(e).imagepart+"i");
System.out.println("("+a.realpart+"+"+a.imagepart+"i)*("+b.realpart+"+"+b.imagepart+"i)="+a.Complexchengfa(b).realpart+"+"+a.Complexchengfa(b).imagepart+"i");
System.out.println("("+a.realpart+"+"+a.imagepart+"i)/("+w.realpart+"+"+w.imagepart+"i)="+a.Complexchufa(w).realpart+"+"+a.Complexchufa(w).imagepart+"i");
} }
测试代码
import junit.framework.TestCase;
import org.junit.Test; public class MyComplexTest extends TestCase {
MyComplex a = new MyComplex(4,5);
MyComplex b = new MyComplex(3,7);
MyComplex c = new MyComplex(2.7,9.5);
MyComplex d = new MyComplex(8,2.1);
MyComplex e = new MyComplex(8,15);
@Test
public void testgetRealPart() throws Exception {
assertEquals(4.0,a.getRealPart());
assertEquals(2.7,c.getRealPart());
}
@Test
public void testgetImagePart()throws Exception{
assertEquals(7.0,b.getImagePart());
assertEquals(2.1,d.getImagePart());
}
@Test
public void testComplexjiafa()throws Exception{
assertEquals(7.0,a.Complexjiafa(b).realpart);
assertEquals(11.6,c.Complexjiafa(d).imagepart);
}
@Test
public void testComplexjianfa()throws Exception{
assertEquals(1.0,a.Complexjianfa(b).realpart);
assertEquals(7.4,c.Complexjianfa(d).imagepart);
}
@Test
public void testComplexchengfa()throws Exception{
assertEquals(-23.0,a.Complexchengfa(b).realpart);
assertEquals(81.67,c.Complexchengfa(d).imagepart);
}
@Test
public void testComplexchufa()throws Exception{
assertEquals(2.0,e.Complexchufa(a).realpart);
assertEquals(3.0,e.Complexchufa(a).imagepart);
}
}首先思路是,要有一个定义复数的函数,即有实数部,和虚数部:
再设计一个,返回实数部和返回虚数部的函数:
最后再依次设计加减乘除的算法:
最后再增加一个test对其进行测试,看是否符合预期:
测试图:
(五)任务五:使用StarUML对实验二中的代码进行建模
UML图:
三、实验中遇到的问题及解决过程
问题1:添加junit.jar包后还是找不到文件test
问题1解决办法:
上网百度了一下,只要再将Junit-4.12.jar添加进去即可
问题2:在test的时候出现看不懂的英文错误
问题2解决办法:
百度了一下,test部分的名称必须为主程序里有的类,且首字母必须为小写。
问题3:出现错误:无法从静态上下文中引用上文方法
问题3解决办法:
使用getRealPart()函数的方法错误,应改为所定义的函数方式。
四、实验体会
本次实验我感觉难度很大,在做实验的时候,也在不停的百度,看能否解决自己的问题,虽然很累但收获也很多,并且也学会了UNL图的制作办法。
五、参考资料
2018-2019-2 20175126谢文航 实验二《Java面向对象程序设计》实验报告的更多相关文章
- 20145239杜文超 《Java程序设计》实验二 Java面向对象程序设计实验报告
20145239 <Java程序设计>实验二 Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S. ...
- 20145213《Java程序设计》实验二Java面向对象程序设计实验报告
20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...
- 20145206《Java程序设计》实验二Java面向对象程序设计实验报告
20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...
- 20145308刘昊阳 《Java程序设计》实验二 Java面向对象程序设计 实验报告
20145308刘昊阳 <Java程序设计>实验二 Java面向对象程序设计 实验报告 实验名称 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面相对象三要素:封 ...
- 20162311 实验二 Java面向对象程序设计 实验报告
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- 实验二Java面向对象程序设计实验报告(2)
实验二 Java面向对象程序设计 实验概述: 课程:程序设计与数据结构 班级:1623班 姓名: 邢天岳 学号:2309 指导老师:娄老师 王老师 实验日期:2017.4.16 实验名称: Java面 ...
- 实验二 Java面向对象程序设计实验报告
实验二 Java面向对象程序设计 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验 ...
- 20145326《Java程序设计》实验二Java面向对象程序设计实验报告
20145326<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...
- 20155217 实验二 Java面向对象程序设计 实验报告
20155217 实验二 Java面向对象程序设计 实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模 ...
- 20145219 《Java程序设计》实验二 Java面向对象程序设计实验报告
20145219 <Java程序设计>实验二 Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S. ...
随机推荐
- spark2.1源码分析1:Win10下IDEA源码阅读环境的搭建
环境:win10.IDEA2016.3.maven3.3.9.git.scala 2.11.8.java1.8.0_101.sbt0.13.12 下载: #git bash中执行: git clone ...
- 微信公众号生成带参数的二维码asp源码下载
晚上闲着没事,一个朋友联系,让帮忙写一个微信公众号利用asp生成带参数的二维码,别人扫了后如果已经关注过该公众号的,则直接进入公众号里,如果没关注则提示关注,关注后自动把该微信用户资料获取到并且保存入 ...
- sqlserver2016新功能
SQL Server 2016中的新功能(数据库引擎) 2017年1月13日 23分钟阅读时长 作者 本人建了个领优惠卷购物群,平时网购可以省点钱.有需要的加群:511169656交流,谢谢 本主题 ...
- 记一次bond引起的网络故障
本案中3个关键服务器 物理服务器:192.168.6.63,简称P,(Physical server) KVM-VM:192.168.6.150,是物理服务器P上的一个KVM虚机,简称VM NAS:外 ...
- hashcode()和equals()
一.equal()方法 Object类中equals()方法实现如下: public boolean equals(Object obj) { return (this == obj); } 通过该实 ...
- [UnityShader基础]06.#pragma multi_compile
参考链接: https://blog.csdn.net/qq826364410/article/details/81774741 https://docs.unity3d.com/Manual/SL- ...
- 浅谈Android之Activity生命周期
Activity作为四大组件之一,出现的频率相当高,基本上我们在android的各个地方都能看见它的踪影,因此深入了解Activity,对于开发高质量应用程序是很有帮助的.今天我们就来详细地聊聊Ac ...
- NumPy基础
一.NumPy ndarray (一)生成ndarray 表 数组生成函数 函数 描述(默认数据类型是float64) array 将输入数据(序列型对象)转换为ndarray,若不显示的指定数据类型 ...
- python———day03
一.字符串格式化输出: 占位符 %s(字符串) %d(整数) %f(浮点数,约等于小数) name = input("Name:") age = input("Ag ...
- Python第8天
zip() 拉链方法 max(字典) 默认比较字典的key,不同类型的数据不能比较,只要可以被for迭代即可 利用zip与max(字典)共同使用 ord() — chr() ascii码表数字与 ...