双色球自动选号
本节主要使用servlet+jQuery+ajax+json+html实现一个双色球自动选号系统,主要目的是让大家对这几项技术的综合使用有一个更深入的理解。 先说下双色球的规则,很多人都幻想过一夜暴富,所以就有了彩票,其中双色球的玩法即简单,奖金又高,因此受大量彩民朋友的欢迎。双色球的规则如下: 每注中奖号码由6个不同的红色球号码和1个蓝色球号码组成。红色球号码从1~33中选择;蓝色球号码从1~16中选择。需要注意的地方就是注意红球号码做去重处理。
静态资源:https://pan.baidu.com/s/1YC9mJMDzUY2uPSu8_FBJYw 提取码:qcjc
先说下整体思路,用户在页面中输入一个正整数,表示希望系统随机生成的双色球的注数,随机双色球内容的生成交由servlet处理,处理结束后将生成的结果发送到jsp页面中,之后使用ajax无刷新来显示生成的双色球结果。
首先在静态页面中编写javascript代码,这里使用jQuery:
$(function(){
//按钮点击事件
$('#getBall').click(function(){
let num = $("#num").val();
let reg = /^([1-9]|[1-2]\d)$/;
//对用户输入的内容进行校验。
if(!reg.test(num)){
let msg = '<div class="alert alert-danger"><strong>注意!</strong> 请输入小于30的正整数</div>';
$('#msg').html(msg);
setTimeout(function(){
$('#msg').empty();
},3000);
return;
}
//使用ajax处理请求和相应
$.ajax({
type: "post",
url: "/colorBall",
data: {num:num},
dataType: "json",
success: function(result){
let redBall = '';
let blueBall = '';
//遍历servlet中返回的结果
$.each(result, function(index, element){
//如果双色球是一位数字的话在前面补0,例如1补0后变成01,主要为了格式好看
if(element < 10){
element = "0" + element;
}
if((index+1) % 7 == 0){
//因为下标是从0开始的,所以需要做+1运算
//当对7求余结果是0的时候,则说明这个索引位置上的值是蓝球
blueBall += '<span class="label label-info label-circle">' + element + '</span>';
}else{
//换行操作
if(index != 0 && index % 7 == 0){
redBall += "<hr>";
blueBall += "<hr>";
}
//生成红球
redBall += '<span class="label label-danger label-circle">' + element + '</span> ';
}
});
//将生成的html展示在页面中
$('#red').html(redBall);
$('#blue').html(blueBall);
//提示信息
let msg = '<div class="alert alert-info">双色球生成成功!</div>';
$('#msg').html(msg);
setTimeout(function(){
$('#msg').empty();
},2000)
},
error:function(){
alert("系统错误,请联系管理员");
}
});
});
});
因为用户可以进行输入,所以要添加校验,这里只运行输入大于0小于30的正整数。
前台搞定后,开始编写后台servlet相关的代码。因为双色球红球不能重复,并且需要对球进行排序,正好TreeSet中的数据不能重复,并且是会自动排序的,所以使用TreeSet来存放生成的一注双色球。用户有可能会生成多注双色球,因此每生成一注双色球之后将其放到一个List中,即这个List是存放着最终计算的结果。
package com.monkey1024.servlet;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSON;
/**
* 双色球
*/
@WebServlet("/colorBall")
public class CollorBallServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String num = request.getParameter("num");
//调用方法获取返回的双色球计算结果
List<Integer> balls = getBall(Integer.parseInt(num));
String jsonStr = JSON.toJSONString(balls);
response.getWriter().write(jsonStr);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
private List<Integer> getBall(int num) {
//因为双色球红球不能重复,并且需要对球进行排序,所以使用TreeSet来存放生成的一注双色球
Set<Integer> temp = new TreeSet<>();
//每生成一注之后,将数据放到list中,该list存放最终的运算结果
List<Integer> balls = new LinkedList<>();
Random r = new Random();
//根据用户的输入来判断生成多少注双色球
for (int i = 0; i < num; i++) {
// 不能生成号码相同的红球
while (temp.size() < 6) {
// 会随机生成0~32个的随机数,因此做加一运算
// 生成红球
temp.add(r.nextInt(33) + 1);
}
// 将红球放到list中
balls.addAll(temp);
//将set中的数据清空以便下一次的使用
temp.clear();
// 生成蓝球放到list中
balls.add(r.nextInt(16) + 1);
}
return balls;
}
}
总结,该小功能主要是对javascript,ajax,前后台数据交互,TreeSet知识的一个综合练习,希望通过这个练习,可以让大家培养出自己的编程思路。
海报
0 条评论
187
相关文章
本站已关闭游客评论,请登录或者注册后再评论吧~