一个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. wikioi 1010 过河卒

    题目描述 Description 如图,A 点有一个过河卒,需要走到目标 B 点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点 ...

  2. 【转】网络中的AS自治域

    1. 什么是AS自治域? 全球的互联网被分成很多个AS 自治域,每个国家的运营商.机构.甚至公司等都可以申请AS号码,AS号码是有限的,最大数目是65536.各自分配的IP地址被标清楚属于哪个AS号码 ...

  3. iOS开发——数据持久化Swift篇&(一)NSUserDefault

    NSUserDefault //******************** 5.1 NSUserDefault和对象归档 func useNSUserDefault() { //通过单利来创建一个NSU ...

  4. innobackupex的备份和恢复

      http://blog.itpub.net/15480802/viewspace-1173479/ 1 原理 分3个阶段:备份backup – 预恢复prepare  -- 恢复restore 注 ...

  5. 前端MVC框架对比

    首先要特别说明一下,作者认为以下四个功能是十分重要的: UI Bindings(UI绑定):作者想说的不仅仅是模板,而是想谈一种在底层模型出现变化时,视图层能够自动相应地更新的陈述性方法.一旦您用过了 ...

  6. c#怎么把byte转化成int

    三种方法来进行转换.(1) 在.NET Framework类库的System名字空间中有个叫做BitConverter的类,它是专门用来进行这种转换的.主要方法:1> GetBytes()方法  ...

  7. linxu,window系统

    window下:net start VMwareHostdVMAuthdServiceVMUSBArbService"VMware NAT Service"VMnetDHCP #启 ...

  8. Graylog2+mongdb+rsyslog中央日志服务器对syslog的web管理--转载

    原文地址:http://blog.sina.com.cn/s/blog_49be4d570100yvv1.html 1.下载mongodb,可以通过下面2中方法安装. (1)官网下载yum源后直接安装 ...

  9. java使用jsp servlet来防止csrf 攻击的实现方法

    背景: 1.csrf知识 CSRF(Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或 ...

  10. LeetCode17 Letter Combinations of a Phone Number

    题意: Given a digit string, return all possible letter combinations that the number could represent. A ...