20169219 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计
一、程序设计中临时变量的使用
任务:
//定义一个数组
int arr[] = {1,2,3,4,5,6,7,8};
//打印原始数组的值
for(int i:arr){
System.out.print(i + " ");
}
System.out.println();
// 添加代码删除上面数组中的5
...
//打印出 1 2 3 4 6 7 8 0
for(int i:arr){
System.out.print(i + " ");
}
System.out.println();
// 添加代码再在4后面5
...
//打印出 1 2 3 4 5 6 7 8
for(int i:arr){
System.out.print(i + " ");
}
System.out.println();
二、单元测试 提交最后三个测试用例都通过的截图
想用程序解决问题时,要会写三种码:
- 伪代码
- 产品代码
- 测试代码
伪代码
是产品代码
最自然的、最好的注释.伪代码可以用汉语写,推荐用英语写,伪代码与具体编程语言无关,不要写与具体编程语言语法相关的语句。
Java编程时,程序员对类实现的测试叫单元测试
测试用例
是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。这里我们的测试输入是“50”,预期结果是“不及格”。
三、以 TDD的方式研究学习StringBuffer
TDD(Test Driven Devlopment, 测试驱动开发)先写测试代码,然后再写产品代码的开发方法叫“测试驱动开发”(TDD)。
package exp2;
import junit.framework.TestCase;
import org.junit.Before;
import org.junit.Test;
/**
* Created by Veronica on 2017/4/20.
*/
public class StringBufferDemo01Test extends TestCase {
StringBuffer a = new StringBuffer("StringBuffer01");//测试14个字符串
StringBuffer b = new StringBuffer("StringBuffer01StringBuffer01");//测试28个字符串
StringBuffer c = new StringBuffer("StringBuffer01StringBuffer01StringBuffer01");//测试42个字符串
@Test
public void tsetcharAt() throws Exception{
assertEquals('S',a.charAt(0));
assertEquals('B',a.charAt(6));
assertEquals('1',b.charAt(11));
}
@Test
public void testcapacity() throws Exception{
assertEquals(30,a.capacity());
assertEquals(44,b.capacity());
assertEquals(58,c.capacity());
}
@Test
public void testlength() throws Exception{
assertEquals(14,a.length());
assertEquals(28,b.length());
assertEquals(42,c.length());
}
@Test
public void testindexOf() throws Exception{
assertEquals(0,a.indexOf("Str"));
assertEquals(12,b.indexOf("01"));
assertEquals(8,c.indexOf("ff"));
}
}
四、让系统支持Short类,并在MyDoc类中添加测试代码表明添加正确
package exp2;
/**
* Created by Veronica on 2017/4/20.
*/
// Server Classes
abstract class Data {
abstract public void DisplayValue();
}
class Short extends Data {
short value;
Short() {
value=5;
}
public void DisplayValue(){
System.out.println (value);
}
}
// Pattern Classes
abstract class Factory {
abstract public Data CreateDataObject();
}
class ShortFactory extends Factory {
public Data CreateDataObject(){
return new Short();
}
}
//Client classes
class Document {
Data pd;
Document(Factory pf){
pd = pf.CreateDataObject();
}
public void DisplayData(){
pd.DisplayValue();
}
}
//Test class
public class MyDoc {
static Document d;
public static void main(String[] args) {
d = new Document(new ShortFactory());
d.DisplayData();
}
}
五、以TDD的方式开发一个复数类Complex
六、StartUML作图
出现的问题
1、IDEA中使用JUnit安装插件JunitGenerator V2.0,
1)选择File->Setting打开设置对话框
2)在设置对话框中选择Plugins, 单击Browse Repositories
按钮打开插件安装界面,而不是单击Install JetBrains plugin...
3)在插件安装对话框的搜索中输入junit,单击JunitGenerator V2.0,单击右边绿色的Install1按钮安装:
不然只能搜索到下面内容
2、在增加测试异常情况的用例testException
和测试边界情况的用例testBoundary
时,出现错误
解决方法:根据提示可知是第21行代码出现错误,把第21行代码添加注释,可运行测试通过,可以确定错误就是这行,
查看MyUtil类的代码,可知(grade<60)为不及格,改写代码测试通过
package exp2;
public class MyUtil {
public static String percentage2fivegrade(int grade){
if (grade<0)
return "错误";
//如果成绩小于60,转成“不及格”
else if (grade < 60)
return "不及格";
//如果成绩在60与70之间,转成“及格”
else if (grade < 70)
return "及格";
//如果成绩在70与80之间,转成“中等”
else if (grade < 80)
return "中等";
//如果成绩在80与90之间,转成“良好”
else if (grade < 90)
return "良好";
//如果成绩在90与100之间,转成“优秀”
else if (grade <= 100)
return "优秀";
//如果成绩大于100,转成“错误”
else
return "错误";
}
}
3、StringBuffer的capacity是怎样计算的?
查资料知道,通过调用length()方法可以得到当前StringBuffer的长度。而通过调用capacity()方法可以得到总的分配容量,分配的容量是随机的吗
由代码的运行结果可以知道,当length为12时,capacity为16,我试着把字符串增加到16,结果显示capacity的结果还是16,当增加到17的时候,capacity的值变为34。
/**
* This implements the expansion semantics of ensureCapacity with no
* size check or synchronization.
*/
void expandCapacity(int minimumCapacity) {
int newCapacity = (value.length + 1) * 2;
if (newCapacity < 0) {
newCapacity = Integer.MAX_VALUE;
} else if (minimumCapacity > newCapacity) {
newCapacity = minimumCapacity;
}
char newValue[] = new char[newCapacity];
System.arraycopy(value, 0, newValue, 0, count);
value = newValue;
}
这段代码解释了StringBuffer的容量(capacity)分配。
StringBuffer在内部维护一个字符数组,当你使用缺省的构造函数来创建StringBuffer对象的时候, StringBuffer的容量被初始化为16个字符,也就是说缺省容量就是16个字符。当StringBuffer达到最大容 量的时候,它会将自身容量增加到当前的2倍再加2,也就是(2*旧值+2)。
如果你使用缺省值,初始化之后接着往里面追加字符,在你追加到第17个字符的时候它会将容量增加 到34(216+2),当追加到34个字符的时候就会将容量增加到70(234+2)。无论何时只要StringBuffer 到达它的最大容量它就不得不创建一个新的字符数组然后重新将旧字符和新字符都拷贝一遍。所以给 StringBuffer设置一个合理的初始化容量值,会提升程序的性能。
4、怎样写测试用例
JUnit4及其在IDEA中的使用
5、调试capacity时出现错误
容量不是随便写的,是设定的吗?根据提示修改就可以通过。
实验总结
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 20min | 12.5% |
设计 | 30min | 18.75% |
代码实现 | 60min | 37.5% |
测试 | 20min | 12.5% |
总结分析 | 30min | 18.75% |
感想
多发现问题,多总结。
参考资料
StringBuffer的capacity()方法
JUnit4及其在IDEA中的使用
Intellj IDEA 简易教程
积极主动敲代码,使用JUnit学习Java
20169219 实验二 Java面向对象程序设计的更多相关文章
- 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- 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 理解并掌握面相对象三要素:封 ...
- 20145113 实验二 Java面向对象程序设计
20145113 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 1.初 ...
- JAVA课程实验报告 实验二 Java面向对象程序设计
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:韩玉琪 学号:20135317 成绩: 指导教师:娄嘉 ...
- 20145225唐振远 实验二 "Java面向对象程序设计"
20145225<Java程序设计> 实验二 Java面向对象程序设计 实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S ...
- 20145208 实验二 Java面向对象程序设计
20145208 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步 ...
- 20162311 实验二 Java面向对象程序设计 实验报告
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
随机推荐
- loj 6053 简单的函数 —— min_25筛
题目:https://loj.ac/problem/6053 参考博客:http://www.cnblogs.com/zhoushuyu/p/9187319.html 算 id 也可以不存下来,因为 ...
- SQL Server数据库优化经验总结
优化数据库的注意事项: 1.关键字段建立索引. 2.使用存储过程,它使SQL变得更加灵活和高效. 3.备份数据库和清除垃圾数据. 4.SQL语句语法的优化.(可以用Sybase的SQL Expert, ...
- springboot mybatisPlus配置
1.pom依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- Git&Repo 命令大全 ***
首先理解几个基本概念: origin:默认远程版本库: master:默认开发分支: 查看本地更新状态: git status jiangzhaowei@ubuntu$ git status # On ...
- 加载Firefox 和 chrome 浏览器配置
Firefox: Chrome:
- zabbix增加手机短信、邮件监控的注意要点,SSL邮件发送python脚本
1.短信接口文档: URL http://xxx.com/interfaces/sendMsg.htm Method POST Description 文字短信调用接口 Request Param L ...
- 在液晶屏里显示浮点数的方法 (sprintf 的妙用)
思路:使用 sprintf 函数将浮点型数据转为指定格式的字符串 #include <stdio.h> #include<string.h> int main() { unsi ...
- 三级联动第二种方法 三级联动.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- vs2010一运行就报错deven.exe assert failure 解决方法,卸载系统中.netFramework最新版本的(简体中文)
vs2010一运行就报错deven.exe assert failure 解决方法,卸载系统中.netFramework最新版本的(简体中文)
- 第十六章 Java内存模型(待续)
········