一个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. android ViewConfiguration

    ViewConfiguration 1.有时候要获取一些android UI的中一些默认参数的来进行操作设置,就要用到ViewConfiguration 官方飞解释是:ViewConfiguratio ...

  2. PHP操作MongoDB数据库

    http://blog.csdn.net/sunboy_2050/article/details/49449319

  3. 【转】Fresco之强大之余的痛楚

    http://www.jianshu.com/p/5364957dcf49 开始之前 如果你有使用的心得,技巧,踩坑经历,希望贡献出来,我会在TODO中慢慢添加(^^)/ 关于Fresco Fresc ...

  4. IDA Script: Remove empty auto labels

    http://simeonpilgrim.com/blog/2010/03/25/ida-script-remove-empty-auto-labels/ #include <idc.idc&g ...

  5. uva10327 - Flip Sort

    Flip Sort Sorting in computer science is an important part. Almost every problem can be solved effec ...

  6. 使用Python脚本进行域名解析

    因为在研究爬虫,所以也了解了下域名解析.要提高爬虫的效率,就需要提高域名解析的效率.我将爬虫记录下的域名作为待解析的域名来测试各域名解析方法的效率.我尝试以下四种方法:1. 单线程依次解析各域名,2. ...

  7. WOSA/XFS及SP综述

    转自  http://blog.csdn.net/andyhou/article/details/6888416 前言:         写给ATM硬件和软件人员的无言歌.         希望对工作 ...

  8. hdu 5594 ZYB's Prime 最大流

    ZYB's Prime Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5 ...

  9. C++进制转换(十进制转二进制、八进制、随意进制)

    十进制转二进制: //十进制转二进制 #include<iostream> using namespace std; void printbinary(const unsigned int ...

  10. 【原创】PostSharp入门笔记

    最近写了一个抓取软件,用户反映软件偶尔会抛异常: 由于当时写代码时没有注意异常处理,大部分方法都没有写try…catch…finally的语句,所以很难找出异常是出在哪个地方,难道要为所有方法加上tr ...