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实践实验报告的更多相关文章

  1. 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...

  2. 20162311 实验三 敏捷开发与XP实践 实验报告

    20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...

  3. 20165308实验三 敏捷开发与XP实践实验报告

    实验三 敏捷开发与XP实践实验报告 实验目的 安装 alibaba 插件,解决代码中的规范问题.再研究一下Code菜单,找出一项让自己感觉最好用的功能. 在码云上把自己的学习搭档加入自己的项目中,确认 ...

  4. 20165230 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20165230 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: 指导教 ...

  5. 20155207王雪纯 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20155207王雪纯 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...

  6. 20155220 实验三 敏捷开发与XP实践 实验报告

    20155220 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  7. # 20155224 实验三 敏捷开发与XP实践 实验报告

    20155224 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  8. 20155226 实验三 敏捷开发与XP实践 实验报告

    20155226 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  9. 20155311 实验三 敏捷开发与XP实践 实验报告

    20155311 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 xp核心工具 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

随机推荐

  1. Arduino控制LED灯(开关控制)

    问题:当使用"digitalRead(BUT) == 1"控制LED灯时会出现"digitalWrite(LED, ledState);"的值出现跳动. 原因: ...

  2. IDEA修改Maven全局配置

    在使用过程中发现,IDEA每次新建一个Project ,这个maven配置都会初始化默认的. 这里需要设置下全局配置: File -> Other Settings -> Settings ...

  3. python-webdriver中添加cookie,解决添加了图片验证码的问题

    遇到问题:之前一直能用的脚本突然跑不通了,仔细一看原来是研发新加了图片验证码...... 解决问题: 手动抓取了cookie并塞进去,解决问题.当然如果你的cookie有效期太短或者是随着会话关闭就失 ...

  4. 17种常用的JS正则表达式 非负浮点数 非负正数

    <input type='text' id='SYS_PAGE_JumpPage' name='SYS_PAGE_JumpPage' size='3' maxlength='5' onkeyup ...

  5. HashMap并发分析

    我们听过并发情况下的HashMap,会出现成环的情况,现在,我就来总结一下它成环的过程. 一言以蔽之,就是他在resize的时候,会改变元素的next指针. 之前在一篇博客里提到,HashMap的re ...

  6. 【有钱的大佬看过来】Java开发学习大纲

    Java开发学习大纲文档V7.0 有钱的大佬可以买下这个版权,全网最完整最详细了,没钱的大佬可以按照自己的方式去整理.有需要的私聊作者QQ:253173641 来源于-幸福的沉淀:https://ww ...

  7. springmvc自定义异常处理类和<mvc:annotation-driven/>自带异常处理优先级问题

    自定义异常类的优先级低于注解驱动的默认异常处理,所以可以给自定义异常处理类,实现一个排序的接口, org.springframework.core.Ordered 改接口的注释: /**  * {@c ...

  8. 阿里云-docker安装mysql

    1.检查内核版本,必须是3.10及以上 uname ‐r 2.安装docker yum install docker 3.输入y确认安装 4.启动docker:service docker start ...

  9. CH5105 Cookies[线性DP]

    http://contest-hunter.org:83/contest/0x50%E3%80%8C%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E3%80%8D%E4%B ...

  10. linux学习:【第3篇】之常见命令2

    一.知识点回顾 临时:关闭当前正在运行的 /etc/init.d/iptables stop 永久:关闭开机自启动 chkonfig iptables off ll /var/log/secure # ...