zoukankan      html  css  js  c++  java
  • 20165324 Java实验三 敏捷开发与XP实验

    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

    任务三:下载搭档的代码,至少进行三项重构

    • 重构内容
    1. Rename可以给类、包、方法变量改名字。
    2. 封装类,还可以封装成员变量。
    3. 避免代码重复,打印信息System.out.println();可通过toString方法重构。
    • 重构动机:
    1. 增加新功能;
    2. 原有功能有BUG;
    3. 改善原有程序的结构;
    4. 优化原有系统的性能 。
    • 重构手法:

    本次重构内容

    • 将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;i<n;i++) {
                stu[i]=new Student();
            }
        }
    
        private static void Input(Student stu[],int n) {//输入
            Scanner sc=new Scanner(System.in);
            for (int i=0;i<n;i++) {
                System.out.println("请按以下格式输入学生信息:姓名 学号 性别 数学成绩 物理成绩");
                stu[i].setName(sc.next());
                stu[i].setNumber(sc.nextInt());
                stu[i].setGender(sc.next());
                stu[i].setMathScore(sc.nextInt());
                stu[i].setPhyScore(sc.nextInt());
            }
        }
        private static void paixu(Student stu[],int n) {
            for (int i=0;i<n-1;i++) {
                for (int j=i+1;j<n;j++) {
                    if (stu[i].getNumber() > stu[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<n;i++) {
                System.out.println("姓名:"+ stu[i].getName() +",学号:"+ stu[i].getNumber() +",性别:"+ stu[i].getGender() +",数学成绩:"+ stu[i].getMathScore() +",物理成绩:"+ stu[i].getPhyScore());
            }
        }
    }
    class Student {
        private String name;
        private int number;
        private String gender;
        private int mathScore;
        private int phyScore;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getNumber() {
            return number;
        }
    
        public void setNumber(int number) {
            this.number = number;
        }
    
        public String getGender() {
            return gender;
        }
    
        public void setGender(String gender) {
            this.gender = gender;
        }
    
        public int getMathScore() {
            return mathScore;
        }
    
        public void setMathScore(int mathScore) {
            this.mathScore = mathScore;
        }
    
        public int getPhyScore() {
            return phyScore;
        }
    
        public void setPhyScore(int phyScore) {
            this.phyScore = phyScore;
        }
    }
    

    任务四:以结对的方式完成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 <sum-1; i++) {
                System.out.printf("%d", a[0]);
                operate1(a, c, n);
            }
            System.out.println(" ");
            System.out.println("对偶移位寄存器输出序列为:");
            for(int i=0;i<sum-1;i++) {
                System.out.printf("%d",a[0]);
                operate2(a,c,n);
            }
        }
        private static int[] operate2(int[] a, int[] c, int n) {
            int temp=a[0];
            for(int i=0;i<n-1;i++) {
                a[i]=a[i+1];
            }
            a[n-1]=0;
            if(temp==1) {
                for(int j=0;j<n;j++) {
                    a[j]=(a[j]+c[n-j-1])%2;
                }
            }
            return a;
        }
        private static int[] operate1(int[] a, int[] c, int n) {
            int temp=0;
            for (int i = 0; i < n; i++) {
                if (a[i] * c[i] == 1) {
                    temp += 1;
                }
            }
            a[n - 1] %= 2;
            for (int j = 0; j < n - 1; j++) {
                a[j] = a[j + 1];
            }
            a[n-1]=temp;
            return a;
        }
    }
    
    
    • 重构之后代码如下:
    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 <sum-1; i++) {
                System.out.printf("%d", a[0]);
                operate1(a, c, n);
            }
            System.out.println(" ");
            System.out.println("对偶移位寄存器输出序列为:");
            for(int i=0;i<sum-1;i++) {
                System.out.printf("%d",a[0]);
                operate2(a,c,n);
            }
        }
        private static int[] operate2(int[] a, int[] c, int n) {
            int temp=a[0];
            for(int i=0;i<n-1;i++) {
                a[i]=a[i+1];
            }
            a[n-1]=0;
            if(temp==1) {
                for(int j=0;j<n;j++) {
                    a[j]=(a[j]+c[n-j-1])%2;
                }
            }
            return a;
        }
        private static int[] operate1(int[] a, int[] c, int n) {
            int temp=0;
            for (int i = 0; i < n; i++) {
                if (a[i] * c[i] == 1) {
                    temp += 1;
                }
            }
            a[n - 1] %= 2;
            for (int j = 0; j < n - 1; j++) {
                a[j] = a[j + 1];
            }
            a[n-1]=temp;
            return a;
        }
    }
    
    • 重构实现截图

    • 实验截图为:

    步骤 耗时 百分比
    需求分析 10min 15%
    设计 15min 21%
    代码实现 20min 28%
    测试 15min 21%
    分析总结 10min 15%

    三、实验体会与总结

    结对编程,一起学习了线性移位寄存器和对偶移位寄存器的相关内容,轮换担任了领航员,一起实现了Java与密码学的小结合。

    四、参考资料

    敏捷开发与XP实践
    IDEA插件使用文档

  • 相关阅读:
    Flask11 Session、CSRF、注销session、利用端点自动跳转
    python学习笔记4-时间函数
    python学习笔记3-循环1
    python学习笔记2-条件语句
    python学习笔记1-基础语法
    sprintf系列函数
    sscanf非常的重要
    c++中.c_str和.c_data
    c++Map用法
    c语言sscanf总结
  • 原文地址:https://www.cnblogs.com/20165324hcj/p/8933335.html
Copyright © 2011-2022 走看看