20165324 Java实验三 敏捷开发与XP实验
一、实验报告封面
课程:Java程序设计 班级:1653班 姓名:何春江 学号:20165324
指导教师:娄嘉鹏 实验日期:2018年4月16日
实验时间:13:45 - 15:25 实验序号:24
实验名称:面向对象程序设计
二、实验内容
任务一:在IDEA中使用工具(Code->Reformate Code)格式化代码,并学习Code菜单的功能
知识点总结
- Code菜单
- 代码整理得:
public class CodeStandard { public static void main(String[] args) { final int m = 20; StringBuffer buffer = new StringBuffer(); buffer.append('S'); buffer.append("tringBuffer"); System.out.println(buffer.charAt(1)); System.out.println(buffer.capacity()); System.out.println(buffer.indexOf("tring")); System.out.println("buffer = " + buffer.toString()); if (buffer.capacity() < m) { buffer.append("1234567"); } for (int i = 0; i < buffer.length(); i++) { System.out.println(buffer.charAt(i)); } }}
- Code菜单使用截图
任务二:下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例
- 实验截图:
- 提交上传截图:
- git log
任务三:下载搭档的代码,至少进行三项重构
- 重构内容
Rename
可以给类、包、方法变量改名字。- 封装类,还可以封装成员变量。
- 避免代码重复,打印信息
System.out.println();
可通过toString
方法重构。
- 重构动机:
- 增加新功能;
- 原有功能有BUG;
- 改善原有程序的结构;
- 优化原有系统的性能 。
- 重构手法:
本次重构内容
- 将Student类中各定义的变量进行重构
- 包名,类名的重构
- 方法的重构
- 对于输出的重构,因为其输出中存在其他参数,未能成功使用
toString()
进行重构。
package hcj;import java.util.Scanner;public class Test { public static void main(String args[]) { System.out.println("输入两个班的人数:"); Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int m=sc.nextInt(); Student []stu1=new Student[n];//创建对象数组 Student []stu2=new Student[m];//创建对象数组 Fen(stu1,n); Fen(stu2,m); System.out.println("现在输入一班学生信息:"); Input(stu1,n); System.out.println("现在输入二班学生信息:"); Input(stu2,m); paixu(stu1,n); paixu(stu2,m); System.out.println("一班信息为:"); Output(stu1,n); System.out.println("二班信息为:"); Output(stu2,m); } private static void Fen(Student[] stu, int n) {//分配空间 for (int i=0;istu[j].getNumber()) { Student s=stu[i]; stu[i]=stu[j]; stu[j]=s; } } } } private static void Output(Student stu[],int n) { for (int i=0;i
任务四:以结对的方式完成Java密码学相关内容的学习,结合重构、git、代码标准等
- 结对编程之实现线性移位寄存器和对偶移位寄存器
- 初步完整代码如下:
import java.util.Scanner;public class Test { public static void main(String[] args) { System.out.println("请输入移位寄存器的级数n:"); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); System.out.println("请设置初态:"); int[] a = new int[n];//状态数 int sum=1; for (int i = 0; i < n; i++) { a[i] = sc.nextInt(); sum=2*sum; } System.out.println("请输入结构常数:");//形如[c1,c2,c3,c4,c5] int[] c = new int[n];//存储的为反馈函数,与反馈函数的对应规律为:若结构常数为[0,1,0,1],则反馈函数为1 0 1 0 for (int i = n-1; i >= 0; i--) { c[i] = sc.nextInt(); } System.out.println("线性移位寄存器输出序列为:"); for (int i = 0; i
- 重构之后代码如下:
import java.util.*;public class Lfsr { public static void main(String[] args) { System.out.println("请输入移位寄存器的级数n:"); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); System.out.println("请设置初态:"); int[] a = new int[n];//状态数 int sum=1; for (int i = 0; i < n; i++) { a[i] = sc.nextInt(); sum=2*sum; } System.out.println("请输入结构常数:");//形如[c1,c2,c3,c4,c5] int[] c = new int[n];//存储的为反馈函数,与反馈函数的对应规律为:若结构常数为[0,1,0,1],则反馈函数为 for (int i = n-1; i >= 0; i--) { c[i] = sc.nextInt(); } System.out.println("线性移位寄存器输出序列为:"); for (int i = 0; i
- 重构实现截图
- 实验截图为:
步骤 | 耗时 | 百分比 | |
---|---|---|---|
需求分析 | 10min | 15% | |
设计 | 15min | 21% | |
代码实现 | 20min | 28% | |
测试 | 15min | 21% | |
分析总结 | 10min | 15% |
三、实验体会与总结
结对编程,一起学习了线性移位寄存器和对偶移位寄存器的相关内容,轮换担任了领航员,一起实现了Java与密码学的小结合。