【问题标题】:Keep regenerating different random numbers in Android不断在 Android 中重新生成不同的随机数
【发布时间】:2025-12-16 08:25:02
【问题描述】:

我正在为 Android 制作一个应用程序,我需要一个号码,每次我调用它时它都会随机变化。

但是,如果我这样做:

Random r = new Random(); // makes random r
public int rndNum = r.nextInt(1000) + 7; 

并多次使用rndNum,每次都保持相同的随机生成数字。

有没有办法不断重新生成随机数?

【问题讨论】:

  • 使用Random 并不意味着你总是会得到不同的号码,也可以是相同的号码。如果你想一直使用unique one,请使用UUID
  • 不,我一直按生成数字的按钮,即使按了 10 次它仍然是相同的数字。
  • 请展示应该生成数字的整个方法以及按钮如何调用它。
  • 不需要,在@Jaydeep Gadhia 的回答中找到了解决方案

标签: java android loops random


【解决方案1】:

也许试试 SecureRandom 类:https://docs.oracle.com/javase/7/docs/api/java/security/SecureRandom.html

初始化成本很高,但您可以在应用程序启动时初始化 SecureRandom,然后继续使用它。

【讨论】:

    【解决方案2】:

    由于缺少发布的上下文代码,我无法验证这一点,但我很确定 OP 正在做类似的事情:

    public static class SomeObject {
        Random r = new Random(); // makes random r
        public int rndNum = r.nextInt(1000) + 7; 
    
        public int getRandomNumber() {
            return this.rndNum;
        }
    }
    
    public static SomeObject obj = new SomeObject();
    
    public static void main(String[] args) throws InterruptedException {
        JButton j = new JButton();
        ...
        j.addActionListener(new ActionListener() {
    
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println(obj.getRandomNumber());
            }
        });
    }
    

    这基本上意味着每次按下按钮时都不会生成一个新的随机数。随机数生成一次,保存为rndNum。因此每次按下按钮时,都会返回相同的数字。

    接受的答案会解决这个问题,但我觉得跟踪每个生成的随机数很浪费。

    解决这个问题的方法是把getRandomNumber方法改成每次调用该方法时生成一个随机数:

    public int getRandomNumber() {
        return new Random().nextInt(1000) + 7; 
    }
    

    【讨论】:

    • 你是对的。 @ely-shaffir 在rndNum 变量中生成一个随机数,并始终读取该变量值而不刷新它的值。 Ely 每次按下按钮时都必须在rndNum 中生成新的随机数。