1、实验要求 本实验要求:以分组军训为背景,综合体验集合与列表的实际业务应用模式和一般组合。 1-1. 业务说明: 1-1.1. 本实
1、实验要求 本实验要求:以分组军训为背景,综合体验集合与列表的实际业务应用模式和一般组合。 1-1. 业务说明: 1-1.1. 本实验以学校按男女性别分组进行军训为业务背景。 1-1.2. 常规而言,军训对象包括年级或班级的所有学生集体。 1-1.3. 由于男女性别的差异原因,实际军训时需要按性别分组进行。 1-1.4. 本实验从技术应用的角度来模拟对军训学生集合的分组。 1-1.5. 分组后,对不同性别组的成员按照身高进行排序。 1-1.6. 本业务关键概念:学生集合、分组以及排序。 1-2. 创建工程并配置环境: 1-2.1. 限制1. 创建实验工程,命名为:SE_JAVA_EXP_E041; 1-2.2. 限制2. 创建包,命名为:cn.campsg.java.experiment; 1-2.3. 限制3. 创建包,命名为:cn.campsg.java.experiment.entity; 1-3. 创建受训者实体类: 1-3.1. 限制1. 在cn.campsg.java.experiment.entity 包中创建受训者实体类:Trainee。 1) Trainee类须实现Comparable 接口。 1-3.2. 为Trainee类创建属性,要求如下:序号属性权限属性名称属性类型属性说明1privatenameString姓名2privatesexString性别(分female和male两种)3Privateheightfloat身高说明:1.为上列属性实现setter/getter方法; 1-3.3. 为Trainee类创建0参构造器。 1-3.4. 为Trainee类实现Comparable的接口方法,接口方法要求如下:访问权限方法名称返回值方法参数参数说明publiccompareTointTrainee anthor其它比较对象方法说明本方法用来比较两个受训者的身高。 1) 如果比较者比anthor对象高,返回大于0的值; 2) 如果比较者比anthor对象矮,返回小于0的值; 3) 如果比较者与anthor对象一样高,返回结果为0。 1-4. 创建军训成员分组业务类: 1-4.1. 限制1. 在cn.campsg.java.experiment.entity包中创建分组业务类:TraineesGroups。 1-4.2. 为TraineesGroups类创建属性,要求如下:序号属性权限属性名称属性类型属性说明1privatetrnListList<Trainee>表示受训学生列表2privategroupsMap<String,List<Trainee>>表示受训学生分组集合说明:以上属性无需实现对应的setter/getter方法。 1-4.3. 为TraineesGroups类创建受训者初始化方法,要求如下:访问权限方法名称返回值方法参数参数说明publicinitTraineesVoidList<Trainee> trnList表示待分组的受训者方法说明本方法实现对需要进行分组的受训学生列表的初始化。 本方法的业务逻辑实现及说明如下: 1) 该方法完成对属性trnList的初始化,参数trnList不能为空; 2) 实际应用中,在创建TraineesGroups对象后必须首先调用此方法。 1-4.4. 为TraineesGroups类创建按性别分组的方法,要求如下:访问权限方法名称返回值方法参数返回值说明publicgroupTraineesMap<String, List<Trainee>>无无方法说明本方法对初始化的受训者,实现按性别分组。性别包括male和female两种。 本方法的业务逻辑实现和相关说明为: 1) 如果受训者学生列表为空或没有成员,不予后续处理; 2) 按照性别创建对应的军训分组集合; 3) 把学生按性别分别分配到对应的分组集合中; 4) 完成对不同分组中的受训者的身高排序。 1-5. 显示模拟军训分组结果: 1-5.1. 限制1. 在cn.campsg.java.experiment包中创建主类:MainClass; 1-5.2. 为MainClass创建入口主方法:main; 1-5.3. 在main中,创建1个分组对象; 1-5.4. 在main中,创建一个包含10个受训学生的集合; 1-5.5. 在main中,应用分组对象完成对受训集合的初始化; 1-5.6. 在main中,应用分组对象进行分组并获取分组结果; 1-5.7. 在main中,在控制台输出每组受训者的信息。2、实现思路 2-1. 创建工程并配置环境。 2-2. 创建受训者实体类: 2-2.1. 在cn.campsg.java.experiment.entity 包中创建奖项类:Trainee; 1)该类实现了java的比较接口:Comparable。 2-2.2. 为Trainee类定义属性: 1) 受训者姓名: private String name; 2) 受训者性别: private String sex; 3) 受训者身高:private float height; 4) 为以上属性实现对应的setter/getter方法 2-2.3. 为Trainee类创建默认的0参构造器。 2-2.4. 为Trainee类实现接口方法,其形式如下: +提示 public int compareTo(Trainee anthor) { } 本方法实现对受训者身高进行比较,业务逻辑实现如下: 1) 在方法内实现自身与anthor对象比较; 2) 分别获取自身的身高和anthor的身高; 3) 利用Float的比较方法compare比较身高:Float.compare(自身身高,anthor身高) ; 4) 返回比较结果。 2-3. 创建军训成员分组业务类: 2-3.1. 在cn.campsg.java.experiment.entity包中创建分组业务类TraineesGroups; 2-3.2. 为TraineesGroups类创建私有属性: 1) 受训学生列表:List<Trainee> trnList = null; 2) 分组后的分组集合:Map<String, List<Trainee>> groups = null; 2-3.3. 为TraineesGroups类创建1参的初始化方法,其形式如下: +提示 public void initTrainees(List<Trainee> trnList) { } 1) 在方法内完成对受训学生列表属性的赋值:this.trnList = trnList; 2-3.4. 为TraineesGroups类创建分组方法groupTrainees,其形式如下: +提示 public Map<String, List<Trainee>> groupTrainees() { } 1) 判断trnList是否为空或是否有成员,如为空或无成员直接返回空值; 2) 创建分组对象并为分组集合属性赋值:groups = new HashMap<String, List<Trainee>>() 3) 创建male和female两类List类型队列,并加入到groups集合; +提示 groups.put("male", new ArrayList<Trainee>()); groups.put("female", new ArrayList<Trainee>()); 4) 通过循环来遍历trnList的成员对象: 其一,获取成员对象:Trainee trainee = trnList.get(i) 其二,判断对象的性别属性: 若成员对象的性别为male则把其加入到male队列中; 若成员对象的性别为female则把其加入到female队列中。 5) 利用集合工具Collections 类的sort方法对分组队列排序:Collections.sort(groups.get(性别)); 6) 返回分组对象 groups。 2-4. 显示模拟军训分组结果: 2-4.1. 在包cn.campsg.java.experiment中创建业务主类:MainClass; 2-4.2. 在MainClass中定义程序入口主方法:main 2-4.3. 在main方法中,创建1个分组对象: 1)TraineesGroups tg = new TraineesGroups(); 2-4.4. 在main方法中,创建一个包含10个不同受训者的学生集合; 1) 创建一个只包含Trainee类型对象的集合; 2) 通过循环的方式创建10个不同受训者加入集合。 2-4.5. 在main方法中,调用tg的initTrainees方法完成分组初始化。 2-4.6. 定义分组变量并调用tg的groupTrainees方法对其赋值:Map<String, List<Trainee>> group = tg.groupTrainees(); 2-4.7. 按性别取出group中的分组队列,并把队列成员信息输出到控制台。3、验证与测试 3-1. 在工程中定位主类:MainClass 3-2. 右键点击MainClass类,依次选择:Run As->Java Application。 3-3. 运行程序,查看输出结果是否符合预期。