一个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. OC: NSString、NSArray、NSNumber

    数组参考: 参考1  参考2  参考3 //字符串 //1.获取字符串的长度: //表情符号最少占两个字节 NSString * s = @"中文字符串

  2. 函数 MultiByteToWideChar() 详解

    函数原型: int MultiByteToWideChar( UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int cchMultiByte ...

  3. CacheView。

    1. ChromeCacheView 2. MozillaCacheView

  4. 转载:as3.0下对象类型返回值与变量默认值的详细说明

    转自:http://www.cuplayer.com/player/PlayerCodeAs/2012/0905367.html Null.NaN.undefined 及各自应用对象:变量的默认值: ...

  5. 微吧里的各种margin负值

    直在做各种项目接各种需求,但你的代码能力得到提高了吗?不停的项目经历虽然能够增加你的代码行数,但不一定能提升你的代码质量,所以除了构建阶段的代码细扣,项目之后的代码总结是至关重要的. 微吧中除了模块化 ...

  6. CSS实现标题右侧“更多”

    HTML < h2>< a h ref="#" >标题< /a> < span>更多…< /span> < /h2 ...

  7. DevExpress 13.2.6源码、安装包、汉化包下载和教程

    DevExpress比DotNetBar控件成熟很多,当然源码是公开的,但是最新版本需要9K多.如果不是土豪,用已经破解的版本或者自己拿源码编译一份就可以了,老外就是这么好. 首先在这里下载然后解压准 ...

  8. Codeforces Gym 100015F Fighting for Triangles 状压DP

    Fighting for Triangles 题目连接: http://codeforces.com/gym/100015/attachments Description Andy and Ralph ...

  9. Codeforces Round #306 (Div. 2) B. Preparing Olympiad dfs

    B. Preparing Olympiad Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/550 ...

  10. opencv官网

    http://wiki.opencv.org.cn/index.php/Template:Doc