J'ai développé du code en Java pour générer dix nombres aléatoires d'une plage de 0 à 99. Le problème est que je dois générer un nombre aléatoire toutes les 2 min. Je suis nouveau dans ce domaine et j'ai besoin de vos opinions.Comment générer des nombres aléatoires à des intervalles de temps définis?
Répondre
Je ne suis pas entièrement sûr de comprendre le problème. Si vous souhaitez générer un nombre aléatoire différent toutes les deux minutes, appelez simplement votre fonction rnd
toutes les deux minutes.
Cela pourrait être aussi simple que quelque chose comme (pseudo-code):
n = rnd()
repeat until finished:
use n for something
sleep for two minutes
n = rnd()
Si vous souhaitez continuer à utiliser le même nombre aléatoire pendant deux minutes et générer une nouvelle:
time t = 0
int n = 0
def sort_of_rnd():
if now() - t > two minutes:
n = rnd()
t = now()
return n
qui continuera à renvoyer le même nombre pour une période de deux minutes.
@Arvind s'il vous plaît modifier le code dans votre question – Yacoby
@Aravindkumar: S'il vous plaît modifier votre propre question et mettre le code là. –
ok peter merci – Aravindkumar
Vous avez deux exigences qui ne sont pas liés:
- Générer des nombres aléatoires
- Effectuez la tâche toutes les 2 minutes.
Pour faire quoi que ce soit toutes les 2 minutes, vous pouvez utiliser un ScheduledExecutorService.
Meilleure réponse jusqu'à présent +1 – whiskeysierra
Vous pouvez planifier l'exécution de votre programme toutes les deux minutes en utilisant les fonctions de planification disponibles dans votre environnement cible (par exemple, cron
, at
, Tâches planifiées Windows, etc.).
Ou vous pouvez utiliser la méthode Thread#sleep
de suspendre votre application pour 2,000ms et exécuter votre code dans une boucle:
while (loopCondition) {
/* ...generate random number... */
// Suspend execution for 2 minutes
Thread.currentThread().sleep(1000 * 60 * 2);
}
(C'est code juste exemple, vous devrez gérer le InterruptedException et tel.
C'est très occupé et très inefficace. – whiskeysierra
@Willi: Non, ce n'est pas le cas. C'est tout le * point * d'utiliser 'sleep'. Et notez que ce n'est pas ma première suggestion. –
Je n'ai jamais dit ça. Et le blocage du thread actuel n'est même pas une solution au problème. Il veut qu'un nombre aléatoire soit généré toutes les 2 secondes. Quel sera le point de bloquer et d'attendre deux secondes sans rien faire? L'utilisation d'un ScheduledExecutorService serait la meilleure solution ici. Thread.sleep (..) n'a presque jamais de sens. – whiskeysierra
Cet exemple ajoute un nombre aléatoire à une file d'attente de blocage toutes les deux minutes. Vous pouvez prendre les numéros de la file d'attente quand vous en avez besoin. Vous pouvez utiliser java.util.Timer comme une installation légère pour planifier la génération de numéros ou vous pouvez utiliser java.util.concurrent.ScheduledExecutorService pour une solution plus polyvalente si vous avez besoin de plus de sophistication à l'avenir. En écrivant les numéros dans une file d'attente, vous disposez d'une interface unifiée de récupération des numéros des deux installations.
Tout d'abord, nous avons mis en place la file d'attente de blocage:
final BlockingDequeue<Integer> queue = new LinkedBlockingDequeue<Integer>();
Voici la configuration avec 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);
Ceci est la configuration avec 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);
Maintenant, vous pouvez obtenir un nouveau nombre aléatoire dans la file toutes les deux minutes. La file d'attente bloquera jusqu'à ce qu'un nouveau numéro devienne disponible ...
int numbers = 100;
for (int i = 0; i < numbers; i++) {
Inetger rand = queue.remove();
System.out.println("new random number: " + rand);
}
Une fois que vous avez terminé, vous pouvez mettre fin au planificateur. Si vous avez utilisé la minuterie, il suffit de faire
timer.cancel();
Si vous avez utilisé ScheduledExecutorService vous pouvez faire
scheduler.shutdown();
La classe Timer est considérée obsolète, vous devez utiliser un ScheduledExecutorService à la place. – whiskeysierra
Bon point. Changé l'exemple pour utiliser ScheduledExecutorService – VoidPointer
@Willi Schönborn, s'il vous plaît ne pas faire les choses! http://stackoverflow.com/questions/2213109/java-util-timer-is-is-deprecated –
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);
}
}
}
EDIT: Bien sûr, vous devez définir 2000 dans la nouvelle minuterie (2000, actionListener); à 120 000 pendant deux minutes.
L'introduction d'une dépendance sur Swing semble un peu exagérée pour ce genre de problème. – VoidPointer
Bien sûr, java.util.TimerTask et Timer pourraient également être utilisés. Je viens d'étendre un exemple existant ... – stacker
+1 pour instancier 'Random' et utiliser' nextInt (int n) '. – trashgod
- 1. Générer des nombres aléatoires de -n à n dans C
- 2. affichant des nombres aléatoires
- 3. Comment générer des nombres réellement aléatoires (NOT pseudo) dans Linux
- 4. Comment puis-je générer des nombres aléatoires en Python?
- 5. MATLAB génère des nombres aléatoires
- 6. Générer des nombres aléatoires avec une distribution probabiliste
- 7. Comment générer des identités aléatoires?
- 8. générer des énumérations aléatoires
- 9. Générer deux nombres aléatoires pour l'échantillonnage RANSAC
- 10. Tâche Ruby: joindre des nombres à des intervalles
- 11. générer des nombres
- 12. CHOISIR des résultats 'aléatoires' avec des paramètres définis
- 13. traitant des nombres aléatoires dans php?
- 14. générer des nombres "aléatoires" qui sont les mêmes à chaque fois avec javascript (c.-à-tête de série des nombres aléatoires)
- 15. Vérification des modifications de la base de données à des intervalles définis dans la page ASP.NET
- 16. Comment générer des événements aléatoires dans Android?
- 17. générateur de nombres aléatoires
- 18. génération de nombres aléatoires
- 19. Sélection des nombres aléatoires sdk iphone
- 20. en Java en utilisant des nombres aléatoires
- 21. Appel d'une fonction javascript à des intervalles de temps distincts
- 22. Fonction d'appel à des intervalles de temps spécifiques sous Linux
- 23. c - générateur de nombres aléatoires
- 24. Comment puis-je formater des intervalles de temps dans Cocoa?
- 25. Comment faire la moyenne des intervalles de temps?
- 26. Générer des valeurs aléatoires en C#
- 27. Simulation de station-service: comment simuler des voitures à intervalles aléatoires?
- 28. Probabilité de nombres aléatoires
- 29. Générer des noms aléatoires à partir de plist
- 30. générer des instances aléatoires avec JAXB
Merci beaucoup à tous – Aravindkumar
Accepter une réponse alors. – whiskeysierra