• 第二次结对编程作业


    1.博客链接

    许宏健

    刘御帆

    作业链接

    仓库地址

    2.具体分工

    刘御帆:

    ·UI界面开发       · 图片收集    

    ·音乐收集          ·ps

    ·UI和后端代码连接

    许宏健:

    ·出牌代码           ·网络接口通信

    ·服务器数据解析     ·代码上传

    ·博客撰写

    3.psp表格

    PSP4.1

    Personal Software
    Process Stages

    预估耗时(min)

    实际耗时(min)

    Planning

    计划

    40

    50

    Estimate

    估计这个任务需要多少时间

    10

    10

    Development

    开发

    1800

    2400

    Analysis

    需求分析
    (包括学习新技术)

    800

    1200

    Design Spec

    生成设计文档

    60

    40

    Design Review

    设计复审

    30

    20

    Coding Standard

    代码规范
    (为开发制定合适的规范)

    30

    20

    Design

    具体设计

    80

    100

    Coding

    具体编码

    1500

    1500

    Code Review

    代码复审

    600

    650

    Test

    测试
    (自我测试,修改,提交修改)

    120

    300

    Reporting

    报告

    70

    70

    Test Report

    测试报告

    20

    20

    Size Measurement

    计算工作量

    10

    10

    Postmortem & Process
    Improvement Plan

    事后总结
    并提出过程改进计划

    30

    30

     

    合计

    5160

    6360

    4.解题思路描述与设计实现说明

    4.1网络接口的使用

            本次作业使用了maven项目管理方法,通过配置pom,获得到Unirest-java包。Unirest是一种轻量级的Http客户端库,能仅仅使用几行代码就能实现Http中get和post请求,大大减少了使用者的时间成本。下面是网络接口http中get请求实现的代码示例:

    String response=Unirest.get("http://api.revth.com/history")
    				.header("X-Auth-Token", token)
    				.queryString("player_id",player_id)
    				.queryString("limit",limit)
    				.queryString("page",page)
    				.asString()
    				.getBody();
    

    4.2代码组织与内部实现设计(类图)

      本次做也大部分使用类与类之间的关联关系,较少使用泛华关系(继承),类图如下。

    4.3算法的关键与关键实现部分流程图

           出牌算法思路:出牌算法采用贪心算法思想,不考虑整体的最优解,只找出局部最优解,即先寻找是否能组成特殊牌型,在验正是够存在普通牌型中的同花顺,如果不存在逐级往下寻找,存在则优先满足后墩,再满足中墩,最后满足前墩

    5.关键代码解释

         ①出牌算法

       下面是代码展示的是从服务器得到牌之后将字符串转化为易处理的数据:

    boolean findsantonhuashun(int a[][]) {
    		int i,j,k,x;
    		int flag1=0,flag2=0;
    		for(i=0;i<4;i++) {
    			x=0;
    			for(j=1;j<=13;j++) {
    				if(j==13)k=0;
    				else k=j;
    				if(a[i][k]==1) x++;
    				if((a[i][k]==0 || j==13) && x==3) flag1++;
    				
    				else if((a[i][k]==0 || j==13) && x==5) flag2++;
    				else if((a[i][k]==0 || j==13) && x==8) {
    					flag1++;
    					flag2++;
    				}
    				else if((a[i][k]==0 || j==13) && x==10) flag1+=2;
    				else if((a[i][k]==0 || j==13) && x!=0)return false;
    			}
    		}
    		if(flag1==1 && flag2==2)return true;
    		else return false;
    	}
    

      ②UI界面

      UI界面有难度的的地方在于代码量大,还有切换页面上较为困难,最后我们选择通过制作弹窗的方式,下面代码展示的是登录按钮事件处理;

    public void actionPerformed(ActionEvent e) {
    				// TODO Auto-generated method stub
    				String usrname = textField.getText();
    				String passwd =  String.valueOf(passwordField.getPassword());
    				StartLogin login =  new StartLogin();
    				login.login.setUsername(usrname);
    				login.login.setPassword(passwd);
    				if(login.startLogin()) {
    					try {
    						new Game();
    						dispose();
    					} catch (FileNotFoundException e1) {
    						// TODO Auto-generated catch block
    						e1.printStackTrace();
    					} catch (JavaLayerException e1) {
    						// TODO Auto-generated catch block
    						e1.printStackTrace();
    					}
    				}
    				else {
    					JOptionPane.showMessageDialog(null, login.re, "密码或用户名错误", JOptionPane.ERROR_MESSAGE);
    					
    				}
    			}

     6.性能分析与改进

     性能消耗最大的是在string类上,这个无法改变。

     

    7.单元测试

    在java中自带的junit4进行单元测试,测试对象为Getrand,测试Http请求是否会出错。

     

     代码:

    package com.xuxuxu.fujianthirteen;
    
    import static org.junit.Assert.*;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.junit.Test;
    
    import com.google.gson.Gson;
    import com.google.gson.reflect.TypeToken;
    
    import kong.unirest.HttpResponse;
    import kong.unirest.JsonNode;
    import kong.unirest.Unirest;
    
    public class GetRandTest {
    
    	@Test
    	public void test() {
    		List<Rand> rand=new ArrayList<>();
    		HttpResponse<JsonNode> response=Unirest.get("http://api.revth.com/rank")
    				 .asJson();
    		String r=response.getBody().toString();
    		//  System.out.println(r);
    		 Gson gson=new Gson();
    		 List<Rand> list2 = gson.fromJson(r, new TypeToken<List<Rand>>(){}.getType());
    		 for(int i=0;i<list2.size();i++)
    		 {
    			rand.add(list2.get(i));
    			System.out.println("play_id: "+rand.get(i).player_id);
    			System.out.println("score: "+rand.get(i).score);
    			System.out.println("name: "+rand.get(i).name);
    			System.out.println("==============");
    		 }
    	}
    
    }
    

     

    8.贴出Github的代码签入记录

    9.遇到的代码模块异常或结对困难及解决方法

    9.1问题描述

    ·不知道怎么使用http请求

    ·json复杂数据转换

    9.2做过哪些尝试

    ·通过百度发现很多人推荐使用unirest-java这种包使用起来较为简单,但是需要用到maven项目管理方法才能正常使用,最后我通过询问java老师最终学会了如何使用maven。

    ·json解析我最终选择了gson这个jar包,在网上查找大量的例子和代码,最终学会了如何使用gson

    9.3是否解决

    两个问题都解决了

    9.4有何收获

           解决上述两个问题的过程中顺便学习了如何使用maven来进行项目管理,而maven是在线协作的项目中不可或缺的一部分。在解决json解析的问题中我熟练的掌握了如何使用gson解析json数据。

    10.评价队友

          许宏健:虽然我们两个的编程技术都不怎么好,但是在这次的组队过程中,队友每次编程过程中遇到的问题能及时和我沟通协商,一起商量出解决的办法,从这些行为中可以看出,我的队友是一个能够虚心学习的人,而且在碰到困难是不轻言放弃的人。

           刘御帆:本次作业我的队友许宏健主要承担前段页面设计部分同时也承担了部分的后端。对于我能力上的不足队友毫无怨言积极辅导我完成我应该负责的部分,是本次结对作业的主力。

    11.学习进度条

     

    N

    新增代码(行)

    本周学习耗时(小时)

    累计学习耗时(小时)

    1

    400

    9

    9

    2

    1300

    26

    35

  • 相关阅读:
    带有“全选”的combotree
    combotree(组合树)的使用
    根据权限显示accordion
    accordion(折叠面板)的使用
    js中substr、substring、indexOf、lastIndexOf的用法
    EasyUI中使用自定义的icon图标
    EasyUI tree的三种选中状态
    C# List集合去重使用lambda表达式
    C# DataTable去重,根据列名去重保留其他列
    win10下部署.Net Web项目到IIS10
  • 原文地址:https://www.cnblogs.com/xhongj/p/11761110.html
Copyright © 2020-2023  润新知