当前位置:编程学习 > JAVA >>

Java数字抽奖游戏核心代码及分析

 最近,正在看《core java 8th》这本书。自己按照书上作者一段代码的思想,自己动手写了一个小代码,深刻的感觉到作者Horstmann超高的代码思想。《core java 8th》真的确实是一本好书,值得慢慢品读,会给人带来无穷的惊喜。自己写的代码与注释如下,废话不多说,上代码。
[java] 
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
     */ 
 &nbs
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,