一个web项目测试,测试抽奖概率的正确性,写了一个小代码,验证概率

post和get请求的一个工具类

package kankan_interface;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper; /**
* json转换方面的工具类,全部为静态方法
*
*/
public class JsonUtil { // private static final Logger logger = logger.getLogger(JsonUtil.class); private static ObjectMapper mapper = new ObjectMapper(); static{
//设置序列化配置,为null的属性不加入到json中
mapper.setSerializationInclusion(Include.NON_NULL);
}
/**
* 将对象转换成json字符串,如果转换失败则返回null
* @param o 需要转换为json的对象
* @return String 转换后的json字符串
*
*
* */
public static String write2JsonStr(Object o){
String jsonStr = "";
try {
jsonStr = mapper.writeValueAsString(o);
} catch (JsonProcessingException e) { //logger.error("|JsonProcessingException|", e);
}
return jsonStr;
} /**
* 将json转换为对象 如果对象模版为内部类会出现问题,所以不要使用内部类
* @param json 要转换的json
* @param clazz 要映射的对象
* @return 转换成的目标对象,如果转换失败返回null
* */
public static Object json2Object(String json,Class<?> clazz){
try {
return mapper.readValue(json,clazz);
} catch (JsonParseException e) {
e.printStackTrace();
// logger.error("|JsonParseException|异常字符串|" + json, e);
} catch (JsonMappingException e) {
e.printStackTrace();
// logger.error("|JsonMappingException|异常字符串|" + json, e);
} catch (IOException e) {
e.printStackTrace();
// logger.error("|IOException|异常字符串|" + json, e);
}
return null;
} /**
* 将json字符串转换为Map
* @param json 需要转换为Map的json字符串 {}开头结尾的
* @return 转换后的map 如果转换失败返回null
* */
@SuppressWarnings("unchecked")
public static Map<String,Object> json2Map(String json){
try {
if(json==null || json.length()==0) {
return new HashMap<String,Object>() ;
}
return mapper.readValue(json,Map.class);
} catch (JsonParseException e) {
System.out.print(e);
//logger.error("|JsonParseException|异常字符串|" + json, e);
} catch (JsonMappingException e) {
System.out.print(e);
//logger.error("|JsonMappingException|异常字符串|" + json, e);
} catch (IOException e) {
System.out.print(e);
//logger.error("|IOException|异常字符串|" + json, e);
}
return new HashMap<String,Object>() ;
} /**
* 将json数组转换为List<Map<String,Object>> json数组格式[{},{}]
* @param jsonArray 需要转换的json数组
* @return 转换后的列表 如果转换失败返回null
* */
@SuppressWarnings("unchecked")
public static List<Map<String,Object>> jsonArray2List(String jsonArray){
// try {
// return mapper.readValue(jsonArray, List.class);
// } catch (JsonParseException e) {
// logger.error("|JsonParseException|异常字符串|" + jsonArray, e);
// } catch (JsonMappingException e) {
// logger.error("|JsonMappingException|异常字符串|" + jsonArray, e);
// } catch (IOException e) {
// logger.error("|IOException|异常字符串|" + jsonArray, e);
// }
return new ArrayList<Map<String,Object>>();
} }

模拟请求,并进行抽奖换算概率

public class Lottery {
/**
* @author 张君
* @deprecated 抽奖并统计概率
* @throws JSONException
* @throws ParseException
*/
// 将Json对象转换成Map public static void main(String[] args) throws JSONException, ParseException {
// TODO Auto-generated method stub
Map<String, String> ma=new HashMap<String, String>();
HttpClicent HTTP=new HttpClicent();
JsonUtil jsonUtil=new JsonUtil(); Map<String,Integer> map2=new HashMap<String,Integer>();
for(int i=0 ; i<10000 ;i++){ //1万次的抽奖概率
String json=HTTP.dopost("XXX/?actId=NationalDay2016&loginUserId=1009406073",ma);//模拟的一个post请求
json=json.substring(9);//取返回的json字符串,因为我们这个请求返回回来,和普通json不一样,
json=json.substring(0,json.length()-1);
Map<String ,Object>map=jsonUtil.json2Map(json); //使用map就是方便现在统计有几种奖品,每个奖品的概率
if(null!=map&&null!=map.get("rtn")&&map.get("rtn").toString().equals("0")){
map=(Map<String, Object>) map.get("data");
if(map.get("valid").toString().equals("1")){//判断是哪个奖品
String key=map.get("presentId").toString();
if(null!=map2.get(key)){
map2.put(key, map2.get(key)+1);
}else{
map2.put(key, 1);
}
}
}
}
for (Entry<String, Integer> entry : map2.entrySet()) {
System.out.println("key = " + entry.getKey() + " and value = " + entry.getValue());
}
}
}

实例--post请求,完成一个抽奖程序概率的测试的更多相关文章

  1. 利用Python写一个抽奖程序,解密游戏内抽奖的秘密

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 极客挖掘机 PS:如有需要Python学习资料的小伙伴可以加点击下 ...

  2. 使用 JavaScript 中的 window 对象执行计时操作,完成一个抽奖程序

    查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的 window 对象执行计时操作,完成一个抽奖程序 实现思路: 在 HTML 页面中放置背景图片.转盘和指针 3 张图片,并设置指 ...

  3. java模拟一个抽奖程序

    今天用一个程序模拟一个从1-32之间,随机抽取7组号码的抽奖程序 * 需要使用Java的图形界面知识 * 窗口  JFrame * 面板  JPanel * 显示文本信息的标签  JLabel * 文 ...

  4. 不会用ant打包、部署项目的工程师,不是一个好程序员(测试)

    副标题:利用ant脚本 自动构建svn增量/全量 系统程序升级包 首先请允许我这样说,作为开发或测试,你一定要具备这种本领.你可以手动打包.部署你的工程,但这不是最好的方法.最好的方式就是全自动化的方 ...

  5. 如何用 Python 写一个简易的抽奖程序

    不知道有多少人是被这个头图骗进来的:) 事情的起因是这样的,上周有同学问小编,看着小编的示例代码敲代码,感觉自己也会写了,如果不看的话,七七八八可能也写的出来,但是一旦自己独立写一段程序,感觉到无从下 ...

  6. python实现年会抽奖程序

    用python来实现一个抽奖程序,供大家参考,具体内容如下 主要功能有 1.从一个csv文件中读入所有员工工号2.将这些工号初始到一个列表中3.用random模块下的choice函数来随机选择列表中的 ...

  7. 一个好玩的jq+php实现转盘抽奖程序

    前台页面: <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <met ...

  8. Scheme语言实例入门--怎样写一个“新型冠状病毒感染风险检测程序”

    小学生都能用的编程语言 2020的春季中小学受疫情影响,一直还没有开学,孩子宅在家说想做一个学校要求的研究项目,我就说你做一个怎么样通过编程来学习数学的小项目吧,用最简单的计算机语言来解决小学数学问题 ...

  9. Dart编程实例 - 第一个Dart程序

    Dart编程实例 - 第一个Dart程序 main() { print("Hello World!"); } 本文转自:http://codingdict.com/article/ ...

随机推荐

  1. IIS7/8 HTTP Error 500.19 错误 0x80070021

    IIS7.0/8.0的错误HTTP Error 500.19 - Internal Server Error ,错误代码为0x80070021,大概原因为IIS7.0的安全设定相比前版本有很大的变更. ...

  2. ActionBar ShareActionProvider

    添加share按钮 添加share按钮的主要步骤: 1. 在ActionBar中添加share按钮 2. 从item中获取ShareActionProvider ShareActionProvider ...

  3. XHTML编码规范

    1.所有的标记都要有结束标记. 2.所有标记的名称和属性名称都必须使用小写 3.所有的的标记必须合理嵌套 4.属性值必须用引号包含起来 5.需要设置的属性都要给一个值 XHTML 规定所有属性都必须有 ...

  4. Keil AGDI Header File

    #ifndef __AGDI__INCED___ #define __AGDI__INCED___ //---Revision History: --------------------------- ...

  5. 负margin使用权威指南

    自CSS2早在1998年,推荐表的使用已经慢慢褪色成背景和历史书中.正因为如此,CSS布局从那时起一直编码优雅的代名词. 的所有CSS概念设计师所使用,奖项可能需要给负margin的使用是最至少谈论的 ...

  6. C#操作Excel(2)-- 打开-读取Excel文档

    由于要为某软件实现导出Excel功能,故有此文. 本文的开发环境是Visual Studio 2010 ,C#, Excel 2007. 新建C#工程后打开Solution Explorer,可以看到 ...

  7. DLX舞蹈链 hdu5046

    题意: 在N个城市选出K个城市,建飞机场(1 ≤ N ≤ 60,1 ≤ K ≤ N),N个城市给出坐标,选择这K个机场,使得从城市到距离自己最近的机场的 最大的距离 最小. 输出这个最小值. 思路: ...

  8. 一步步学Mybatis-以接口操作的方式编程(2)

    上一章节中,我们已经搭建玩了最简单的能够运行的HelloWorld环境,这一章将把上章中的操作方式改为以接口的方式操作 我们可以发现在上一个章节中 public static void testBas ...

  9. TOJ3651确定比赛名次

    确定比赛名次   Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte Total Submit: 23          ...

  10. [ES6] 13. Using the ES6 spread operator ...

    The spread operator (...) allows you to "explode" an array into its individual elements. S ...