JAVA随机数对于抽奖,班级点名代码实现与原理

本文介绍了使用JAVA生成不重复随机数的代码实现,应用于抽奖和班级点名场景。通过示例代码展示了两种方法,讨论了在生成随机数过程中避免重复值的策略。
摘要由CSDN通过智能技术生成

JAVA随机数对于抽奖,班级点名代码实现与原理

直接上需求:要求编写程序,生成5个不重复的随机数。重复的话重新生成。
最终生成的5个随机数放到数组中,要求数组中这5个随机数不重复。

最近学习了Random,以下代码用到了数组、生成随机数等知识。首先我们最关键的是要解决生成的随机数如何跟数组当中的元素进行对比,并且当两个值相等的时候继续生成随机数,直到生成的五个随机数跟数组中的元素不相同的时候输出。

先整理了一个简单的思路,便于理解。

    1、创建Random 对象
    2、给定一个容量为5的int数组,因为动态创建的一维数组默认值都是0,但是随机生成[0~100],也可能生成0,没有办法区分随机生成的0和一维数组当中的0,所以遍历一维数组并赋值为200.
    3、int index=0;
    while (结束条件是:当index大于数组长度){
         创建0-100之间的随机数
        if (随机产生的数不等于数组里面的数,或者说arr数组中不含有这个num){
            把这个num放到index下标的数组当中
            下标加1,下次产生随机数,就可以放到index+1下标的位置上
        }
   4、给定一个方法去判断产生的随机数是否与数组当中的元素相等。
   方法一 是采用数组排序,然后经过二分查找的方式实现。但是方法一有一个逻辑上的BUG,给定一个初始化容量为5的一维数组,思考当赋值为-1的时候会产生什么后果?答案是当一维数组默认值给-1的时候,当产生一位随机数放进一维数组的时候回对数组进行排序,产生的随机数就会被排序放到一维数组的最后一位,而数组下标为0的元素还是-1,此时已经进行了index++操作,就是说下一次产生的随机数就被放到了下标为1的数组元素上面去了,而下标为0的元素始终是-1,这与我们的初衷是违背的所以就有了方法二。
   方法二 遍历数组,下标为index上的元素如果等于随机产生的数字返回true,不等则false。

方法一代码如下:

public class RandomTest021 {
   
    public static void main(String[] args) {
   
        //创建 Random 对象
        Random random=new Random();
        //给定一个容量为5的int数组

        int[] arr=new int[5];
        for (int i = 0; i < arr.<
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的 Java 随机数滚动抽奖界面设计示例: ```java import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Lottery extends JFrame implements ActionListener { private JLabel label; private JButton buttonStart, buttonStop; private Timer timer; private int number; private boolean isRunning; public Lottery() { super("抽奖"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 200); setLayout(new BorderLayout()); label = new JLabel("点击开始按钮开始抽奖", JLabel.CENTER); label.setFont(new Font("宋体", Font.BOLD, 20)); add(label, BorderLayout.CENTER); JPanel panel = new JPanel(new FlowLayout()); buttonStart = new JButton("开始"); buttonStart.addActionListener(this); panel.add(buttonStart); buttonStop = new JButton("停止"); buttonStop.addActionListener(this); panel.add(buttonStop); add(panel, BorderLayout.SOUTH); timer = new Timer(100, this); isRunning = false; } public void actionPerformed(ActionEvent e) { if (e.getSource() == buttonStart) { if (!isRunning) { timer.start(); isRunning = true; buttonStart.setEnabled(false); buttonStop.setEnabled(true); } } else if (e.getSource() == buttonStop) { if (isRunning) { timer.stop(); isRunning = false; buttonStart.setEnabled(true); buttonStop.setEnabled(false); JOptionPane.showMessageDialog(this, "恭喜您获得 " + number + " 号奖品!", "抽奖结果", JOptionPane.INFORMATION_MESSAGE); } } else if (e.getSource() == timer) { number = (int) (Math.random() * 100); label.setText("正在抽奖,幸运号码:" + number); } } public static void main(String[] args) { Lottery lottery = new Lottery(); lottery.setVisible(true); } } ``` 运行该程序后,会显示一个抽奖界面,点击开始按钮后,会随机生成一个幸运号码并滚动显示在界面上,再次点击停止按钮后,会弹出一个对话框显示抽奖结果。在程序中,使用了 Java 的定时器 Timer 来控制随机数的滚动,并且通过 JButton 按钮的 ActionListener 监听器来响应用户的操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值