如何生成在设定的时间间隔随机数?(How to generate random numbers at

2019-10-19 10:53发布

我已开发的代码在Java中从一个范围0到99的问题是我需要生成每2分钟的随机数生成10张随机数。 我是新来这个领域,需要你的意见。

Answer 1:

这个例子添加一个随机数到阻止每两分钟出队。 当你需要他们,你可以从队列中取数。 您可以使用java.util.Timer中作为一个轻量级的工具来安排数生成,或者如果您需要在未来更复杂,你可以使用java.util.concurrent.ScheduledExecutorService一个更通用的解决方案。 通过写号的出队,你有两个工厂的检索号码的统一接口。

首先,我们成立了阻塞队列:

final BlockingDequeue<Integer> queue = new LinkedBlockingDequeue<Integer>();

这里是java.utilTimer的设置:

TimerTask task = new TimerTask() {
    public void run() {
        queue.put(Math.round(Math.random() * 99));
        // or use whatever method you chose to generate the number...
    }
};
Timer timer = new Timer(true)Timer();
timer.schedule(task, 0, 120000); 

这是java.util.concurrent.ScheduledExecutorService设置

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
Runnable task = new Runnable() {
    public void run() {
        queue.put(Math.round(Math.random() * 99));
        // or use whatever method you chose to generate the number...
    }
};
scheduler.scheduleAtFixedRate(task, 0, 120, SECONDS);

现在,你可以从队列中得到一个新的随机数,每两分钟。 队列将阻塞,直到一个新的号码使用...

int numbers = 100;
for (int i = 0; i < numbers; i++) {
    Inetger rand = queue.remove();
    System.out.println("new random number: " + rand);
}

一旦你完成,你可以终止调度。 如果您使用的定时器,只是做

timer.cancel();

如果您使用ScheduledExecutorService的,你可以做

scheduler.shutdown();


Answer 2:

你有两个要求,这是不相关的:

  1. 生成随机数
  2. 执行任务,每2分钟。

做任何事情,每2分钟就可以使用ScheduledExecutorService的。



Answer 3:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.Timer;

public class TimerExample {
    Random rand = new Random();
    static int currRand;

    TimerExample() {
        currRand = rand.nextInt(99);
        ActionListener actionListener = new ActionListener() {
            public void actionPerformed(ActionEvent actionEvent) {
                currRand = rand.nextInt(99);
            }
        };
        Timer timer = new Timer(2000, actionListener);
        timer.start();
    }

    public static void main(String args[]) throws InterruptedException {
        TimerExample te = new TimerExample();
        while( true ) {
            Thread.currentThread().sleep(500);
            System.out.println("current value:" + currRand );
        }
    }
}

编辑:当然,你应该在新的定时器(2000,的ActionListener)设置2000; 至120 000两分钟。



Answer 4:

你可以安排你的程序运行一次使用每两分钟任何调度功能可供您在目标环境(例如, cronat中,Windows计划任务等)。

或者你可以使用Thread#sleep方法暂停您的申请2,000ms,并在循环中运行你的代码:

while (loopCondition) {
    /* ...generate random number... */

    // Suspend execution for 2 minutes
    Thread.currentThread().sleep(1000 * 60 * 2);
}

(这只是示例代码,你需要处理InterruptedException的和这样的。)



Answer 5:

我不能完全肯定我理解这个问题。 如果你想生成每两分钟一个不同的随机号码,只需拨打您的rnd函数每两分钟。

这可能是因为类似的信息(伪代码)一样简单:

n = rnd()
repeat until finished:
    use n for something
    sleep for two minutes
    n = rnd()

如果要使用相同的随机数,保持两分钟,并产生一个新问题:

time t = 0
int n = 0

def sort_of_rnd():
    if now() - t > two minutes:
        n = rnd()
        t = now()
    return n

这将继续返回相同数量的两分钟时间。



文章来源: How to generate random numbers at set time intervals?