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

本文介绍了使用Java实现数字抽奖游戏的核心代码,包括生成不重复的中奖序列的方法。通过Math.random()产生随机数,确保中奖数组result的元素不重复,实现了公平的抽奖逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.jbob.controllers.shouji;

import java.util.Arrays;  

 
public class a {  
    private int gamesNumber;    // 生成游戏的数量,为以后多线程扩展做考虑  
    private int numbersLength;  // 数字序列的总长度  
    private int winningNumbersLength;  // 中奖的数字序列的长度  
      
     
    public a(int gamesNumber, int numbersLength, int winningNumbersLength) {  
        this.gamesNumber = gamesNumber;  
        this.numbersLength = numbersLength;  
        this.winningNumbersLength = winningNumbersLength;  
    }  
 
     
    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;  
    }  
      
     
    public int[] generateWinningNumberArray(int length) {  
        int[] numbers = a.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;  
    }  
      
     
    public void showWinningNumberArray() {  
        int[] winningNumbers = this.generateWinningNumberArray(winningNumbersLength);  
        Arrays.sort(winningNumbers);  
          
        for(int r : winningNumbers) {  
            System.out.print(r + " ");  
        }  
          
        System.out.println();  
    }  
 
     
    public int getGamesNumber() {  
        return gamesNumber;  
    }  
 
     
    public void setGamesNumber(int gamesNumber) {  
        this.gamesNumber = gamesNumber;  
    }  
 
     
    public int getNumbersLength() {  
        return numbersLength;  
    }  
 
     
    public void setNumbersLength(int numbersLength) {  
        this.numbersLength = numbersLength;  
    }  
 
     
    public int getWinningNumbersLength() {  
        return winningNumbersLength;  
    }  
 
     
    public void setWinningNumbersLength(int winningNumbersLength) {  
        this.winningNumbersLength = winningNumbersLength;  
    }  
      
     
    public static void main(String[] args) {  
        int i = 20;    // int i = Integer.parseInt(args[0]);  
        for(int j = 0; j < i; j++) {  
            a game1 = new a(1, 15, 7);  
            game1.showWinningNumberArray();  
        }  
    }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值