20175212童皓桢 实验三敏捷开发与XP实践实验报告
20175212童皓桢 实验三敏捷开发与XP实践实验报告
实验内容
- XP基础
- XP核心实践
- 相关工具
实验步骤
一、Code菜单功能的研究
- Move Line/statement Down/Up:将某行、表达式向下、向上移动一行
- suround with:用 try-catch,for,if等包裹语句
- comment with line/block comment:把选中它区域变成注释
- show reformat file dialog:按照格式自动对齐
- Optimize imports:可以优化imports,去除不必要的imports
- Insert Live Template:插入一些记不起来的 Live Template 缩写
二、下载搭档的Complex代码并添加单元测试
1.添加搭档仓库
2.产品代码
/**
* @author Jason Tong
* @date 2019/4/29 14:32.
*/
public class Complex {
// 定义属性并生成getter,setter
double RealPart;
double ImagePart;
// 定义构造函数
public Complex(){}
public Complex(double R,double I){
ImagePart = I;
RealPart = R;
}
public boolean equals(Object obj){
if(this == obj) {
return true;
}
if(!(obj instanceof Complex)) {
return false;
}
Complex complex = (Complex) obj;
if(complex.RealPart != ((Complex) obj).RealPart) {
return false;
}
if(complex.ImagePart != ((Complex) obj).ImagePart) {
return false;
}
return true;
}
public String toString() {
String str = "";
if (ImagePart > 0)
str = RealPart + "+" + ImagePart + "i";
if (ImagePart == 0)
str = RealPart + "";
if (ImagePart < 0)
str = RealPart + " " + ImagePart + "i";
return str;
}
// 定义公有方法:加减乘除
Complex ComplexAdd(Complex a) {
return new Complex(RealPart+a.RealPart,ImagePart+a.ImagePart);
}
Complex ComplexSub(Complex a) {
return new Complex(RealPart-a.RealPart,ImagePart-a.ImagePart);
}
Complex ComplexMulti(Complex a) {
return new Complex(RealPart*a.RealPart,ImagePart*a.ImagePart);
}
Complex ComplexDiv(Complex a) {
if(a.RealPart==0||a.ImagePart==0) {
System.out.println("被减数不能为0");
return new Complex();
}
double d = Math.sqrt(a.RealPart*a.RealPart)+Math.sqrt(a.ImagePart*a.ImagePart);
return new Complex((RealPart*a.RealPart+ImagePart*a.ImagePart)/d,Math.round((RealPart*a.ImagePart-ImagePart*a.RealPart)/d));
}
}
3.测试代码
import static org.junit.Assert.*;
import org.junit.Test;
import junit.framework.TestCase;
public class ComplexTest extends TestCase {
Complex complex = new Complex(1,1);
@Test
public void testAdd(){
assertEquals(new Complex(4.3,4.4), complex.ComplexAdd(new Complex(3.3,3.4)));
}
//测试加法
@Test
public void testSub(){
assertEquals(new Complex(-4.3,-3.4), complex.ComplexSub(new Complex(5.3,4.4)));
}
//测试减法
@Test
public void testMulti(){
assertEquals(new Complex(4.0,3.0), complex.ComplexMulti(new Complex(4.0,3.0)));
}
//测试乘法
@Test
public void testDiv(){
assertEquals(new Complex(1.0,1.0), complex.ComplexDiv(new Complex(1.0,1.0)));
assertEquals(new Complex(0.0,0.0), complex.ComplexDiv(new Complex(1.0,0.0)));
//assertEquals(new Complex(0.0,0.0), complex.ComplexDiv(new Complex(3,4)));
//边缘测试
}
@Test
public void testequals(){
assertEquals(true, complex.equals(new Complex(1.0,1.0)));
}
//测试判断相等
}
三、重构的练习
原代码为:
class A {
final double PI=3.1415926;// PI是常量
public double getArea(final double r) {
return PI*r*r;
}
public final void speak() {
System.out.println("您好,How's everything here ?");
}
}
public class Example5_9 {
public static void main(String args[]) {
A a=new A();
System.out.println("面积:"+a.getArea(100));
a.speak();
}
}
对类名以及变量名进行重构
进行封装
重构后的代码为:
/**
* @author Jason Tong
* @date 2019/4/29 16:53.
*/
class Calculate {
final double PI=3.1415926;// PI是常量
private int r;
public double getArea() {
return PI* getR() * getR();
}
public final void speak() {
System.out.println("您好,How's everything here ?");
}
public int getR() {
return r;
}
public void setR(int r) {
this.r = r;
}
}
public class Example5_9 {
public static void main(String args[]) {
Calculate a=new Calculate();
a.setR(10);
System.out.println("面积:"+a.getArea());
a.speak();
}
}
四、用Java完成密码学内容
用java实现凯撒密码
代码为:
/**
* @author Jason Tong
* @date 2019/5/3 16:58.
*/
public class Caesar {
public static void main(String args[]) throws Exception{
String s=args[0];
int key=Integer.parseInt(args[1]);
Movement m=new Movement();
int n=s.length();
String es="";
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
if(c >= 'a' && c <= 'z'){
es=m.realizeMove(n,c,key,'a','z');
}
else if (c >= 'A' && c <= 'Z'){
es=m.realizeMove(n,c,key,'A','Z');
}
}
System.out.println(es);
}
}
/**
* @author Jason Tong
* @date 2019/5/3 16:59.
*/
public class Movement {
String es="";
public String realizeMove(int n,char c,int key,char a,char b){
//移动key%26位
c+=key%26;
if(c<a) {
c+=26;
//向左超界
}
if(c>b) {
c-=26;
//向右超界
}
es+=c;
return es;
}
}
实验中遇到的问题
- 问题一:使用alibaba插件检查代码规范性,提示缺少开发者信息
- 解决办法一:
File>Setting>Editor>File and Code Template
按照下图输入开发者信息,新建类时自动添加信息。
完成代码规范
- 问题二:无法推送搭档的仓库
- 解决办法二: 根据命令行提示,表明身份信息,即可推送
感悟和体会
- 学会使用Java作为工具,帮助其他学科的学习,比如密码学或是数据结构
- 可以在仓库中添加其他成员,以便于将来的结对和团队学习
- 血泪教训!!! 修改博客随笔时一定要及时备份!!经常记得
git pull
!!!
参考博客
https://blog.csdn.net/weixin_42254058/article/details/81219931
http://www.cnblogs.com/rocedu/p/4795776.html
20175212童皓桢 实验三敏捷开发与XP实践实验报告的更多相关文章
- 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...
- 20162311 实验三 敏捷开发与XP实践 实验报告
20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...
- 20165308实验三 敏捷开发与XP实践实验报告
实验三 敏捷开发与XP实践实验报告 实验目的 安装 alibaba 插件,解决代码中的规范问题.再研究一下Code菜单,找出一项让自己感觉最好用的功能. 在码云上把自己的学习搭档加入自己的项目中,确认 ...
- 20165230 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20165230 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: 指导教 ...
- 20155207王雪纯 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20155207王雪纯 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...
- 20155220 实验三 敏捷开发与XP实践 实验报告
20155220 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- # 20155224 实验三 敏捷开发与XP实践 实验报告
20155224 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- 20155226 实验三 敏捷开发与XP实践 实验报告
20155226 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- 20155311 实验三 敏捷开发与XP实践 实验报告
20155311 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 xp核心工具 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
随机推荐
- org.apache.shiro.realm.AuthorizingRealm - No cache or cacheManager properties have been set. Authorization cache cannot be obtained.
项目中用spring shiro来处理权限的问题,但是启动的时候会打印如下日志 org.apache.shiro.realm.AuthorizingRealm - No cache or cacheM ...
- 设置队列中文件上的“X”号的点击事件+uploadLimit动态加1
目的:1.设置文件队列中“x”号的点击事件 2.每次删除服务器文件后,把uploadLimit + 1: 'onUploadSuccess': function (file, data, respon ...
- 无障碍开发(三)之ARIA aria-***属性值
aria-***属性值
- Array.reduce()方法
Array.reduce()方法是对数组的遍历,返回一个单个返回值 使用方法: Array.reduce((acc, cur, idx, src) => { }, initialValue) ...
- 4G漏洞
4G VoLTE漏洞:可致用户地理位置和其它个人信息泄露 2017-08-05 LBS 首先要了解下,什么是VoLTE. VoLTE为英文Voice Over LTE的缩写,直译就是音频通过LTE网络 ...
- Logback日志输出到ELK
用docker-compose本机部署elk docker-compose.yml version: "3" services: es01: image: docker.elast ...
- 2019-2020-1 20199319《Linux内核原理与分析》第六周作业
系统调用的三层机制(下) 给MenuOS增加命令 首先进入LinuxKernel文件夹,删除menu目录,然后git clone克隆一个新版本的menu,新版本的menu中已经添加了time和time ...
- 003-centos7:rsyslog简单配置客户端和服务器端
实现把一个主机作为客户端,把日志发送到指定的服务器端: [服务器端] 开放tcp端口,udp端口: vim /etc/rsyslog.conf: # Provides UDP syslog recep ...
- k8s master节点添加kubectl的使用
- Spring使用@AspectJ开发AOP(零配置文件)
前言: AOP并不是Spring框架特有的.Spring只是支持AOP编程 (面向切面编程) 的框架之一. 概念: 1.切面(Aspect) 一系列Advice + Pointcut 的集合. 2.通 ...