最近,正在看《corejava8th》这本书。自己按照书上作者一段代码的思想,自己动手写了一个小代码,深刻的感觉到作者Horstmann超高的代码思想。《corejava8th》真的确实是一本好书,值得慢慢品读,会给人带来无穷的惊喜。自己写的代码与注释如下,废话不多说,上代码。
package com.luiszhang.test;
import java.util.Arrays;
/**
* NumberLotteryGame
* 一个简单的数字彩票游戏类
* @author LuisZhang
* 参考了core java 8th中的例3-7的设计思想
*/
public class NumberLotteryGame {
private int gamesNumber; // 生成游戏的数量,为以后多线程扩展做考虑
private int numbersLength; // 数字序列的总长度
private int winningNumbersLength; // 中奖的数字序列的长度
/**
* Constructor with three parameters
* 初始化3个参数的构造方法
* @param gamesNumber
* @param numbersLength
* @param winningNumbersLength
*/
public NumberLotteryGame(int gamesNumber, int numbersLength, int winningNumbersLength) {
this.gamesNumber = gamesNumber;
this.numbersLength = numbersLength;
this.winningNumbersLength = winningNumbersLength;
}
/**
* Generate a number Array
* 生成一个产生中奖序列所需的数字序列
* @param length 数字序列的长度
* @return numbers 产生的数字序列
*/
public static int[] generateNumberArray(int length) {
int[] numbers = new int[length];
for (int i = 0; i < numbers.length; i++) {
numbers[i] = i + 1;
}
return numbers;
}
/**
* Generate a winning number array
* 根据生成的数字序列,产生不重复的中奖数字序列
* @param length 中奖数字序列的长度
* @return result 中奖数字数组
*/
public int[] generateWinningNumberArray(int length) {
int[] numbers = NumberLotteryGame.generateNumberArray(numbersLength);
int[] result = new int[length];
int n = numbersLength;
// 该for循环为产生不重复的中奖序列的核心代码
for(int i = 0; i < result.length; i++) {
int r = (int) (Math.random() * n); // 随机产生一个从0——(n-1)的数字,Math.random()
// 随机产生一个[0, 1)范围的double型数值,
result[i] = numbers[r]; // 将该随机数字作为数组的下标,
// 将该下标对应的值赋给result[i]
numbers[r] = numbers[n - 1]; // 将numbers数组的numbers[n-1]的值,赋给刚已赋
// 值过的numbers[r]。
n--; // 将n-1,从而下一次循环产生的随机的原数组下标的范围从0——(n-1)-1,
// 保证了上一步中,已经赋值给数组中其他数的numbers[n-1],不会在下次循环中给取
// 得,从而保证了产生的中奖数组result为不重复的。
}
return result;
}
/**
* Show winning NumberArray
* 显示中将数组
*/
public void showWinningNumberArray() {
int[] winningNumbers = this.generateWinningNumberArray(winningNumbersLength);
Arrays.sort(winningNumbers);
for(int r : winningNumbers) {
System.out.print(r + " ");
}
System.out.println();
}
/**
* @return the gamesNumber
*/
public int getGamesNumber() {
return gamesNumber;
}
/**
* @param gamesNumber the gamesNumber to set
*/
public void setGamesNumber(int gamesNumber) {
this.gamesNumber = gamesNumber;
}
/**
* @return the numbersLength
*/
public int getNumbersLength() {
return numbersLength;
}
/**
* @param numbersLength the numbersLength to set
*/
public void setNumbersLength(int numbersLength) {
this.numbersLength = numbersLength;
}
/**
* @return the winningNumbersLength
*/
public int getWinningNumbersLength() {
return winningNumbersLength;
}
/**
* @param winningNumbersLength the winningNumbersLength to set
*/
public void setWinningNumbersLength(int winningNumbersLength) {
this.winningNumbersLength = winningNumbersLength;
}
/**
* Main method
* 用于测试该类的main方法
* @param args
*/
public static void main(String[] args) {
int i = 20; // int i = Integer.parseInt(args[0]);
for(int j = 0; j < i; j++) {
NumberLotteryGame game1 = new NumberLotteryGame(1, 15, 7);
game1.showWinningNumberArray();
}
}
}
分享到:
相关推荐
抽奖代码抽奖代码抽奖代码抽奖代码抽奖代码抽奖代码抽奖代码抽奖代码抽奖代码抽奖代码抽奖代码抽奖代码抽奖代码抽奖代码抽奖代码抽奖代码抽奖代码抽奖代码抽奖代码抽奖代码抽奖代码抽奖代码抽奖代码抽奖代码抽奖代码...
基于java web的旋转抽奖转盘源代码。基于java web的旋转抽奖转盘源代码。基于java web的旋转抽奖转盘源代码。
java简单抽奖游戏代码
是一个关于抽奖的代码!!希望对大家有用!! 抽奖还是挺有意思的.... 呵呵! 里面还有代码详解,个人感觉真的还不错!
幸运抽奖java代码及详细说明
文档内包含java程序用到的抽奖算法,可以设置奖品的中奖概率,然后进行逻辑抽奖
根据抽奖个数和抽奖概率获得一个结果,支持不同个数的奖品。
数字编号批量滚动抽奖代码实现,能实现一次抽7个编号(不少代码有注释),有兴趣的朋友可以下载改良一下!
jQuery三排图标上下翻滚的游戏机抽奖代码。适用于移动端抽奖演示。
大转盘代码,好好分析,很有用,各位一起加油~
这是用Java语言编写的抽奖器源代码,复制粘贴后可以直接使用
红球32选6,蓝球16选1。电脑随机抽取中奖号码,手动填写号码和电脑随机填写号码,并判断中奖情况。
jQuery随机数字抽奖代码基于jquery-1.9.1.min.js制作的数字抽奖网页代码,共1-16,16个数字,点击“点我抽奖”按钮,数字变色,顺着方框转动,数字停止转动,显示中奖号码,
jquery随机数字抽奖程序中奖结果显示代码。
1、采用Java语言开发,集成SpringBoot,Redis、Mybatis,SpringEvent、Maven,项目 2、包含前端、后端源码,数据库设计、SQL脚本,抽奖算法如果没有实现思路,这是一个很好的入门案例。
java源码实现年会抽奖程序,可以自定义抽奖范围进行抽奖。
ACCP8.0S1第十章JAVA幸运抽奖练习项目,技术难点,幸运抽奖
基于java语言编写的一个简单的抽奖程序
Java抽奖系统源码整理