2011-02-24 3 views
1

me demandais si vous pouviez me aider:Java au hasard: Ensemencement problème

J'ai une méthode appelée initializeAll:

public final void initializeAll() { 
//other stuff........ 
rand = new Random(353); 
} 

Alors je lance le projet et une interface graphique saute vers le haut, et certaines opérations sont effectué. Lorsque j'appuie sur le bouton "reset" dans mon interface graphique, intializeAll est appelé à nouveau sur le même objet de classe. Cependant, les opérations qui sont effectuées maintenant ne sont pas les mêmes qu'avant, bien qu'elles devraient être, puisque les deux fois, une graine de 353 est utilisée sur l'objet Random nouvellement créé. Pourquoi cette différence? Est-ce que je fais quelque chose de mal?

EDIT: désolé, ce n'est pas "certaines opérations sont effectuées". c'est qu'une certaine initialisation de la population d'agents a lieu. et à chaque fois, l'initialisation est différente, bien que la même graine soit utilisée.

private static int [][] initializePop(Random rand) { 
     int[][] temp = new int[ROWS][COLS]; 
     for (int row = 0; row < ROWS; row++) { 
      for (int col = 0; col < COLS; col++) { 
       temp[row][col] = rand.nextInt(12) - 5; 
      } 
     } 
     return temp; 
    } 

SOLUTION:

désolé pour prendre vos gars temps. J'ai compris le problème. en ce moment, mon application est un gâchis de divers threads, swingworkers, etc., c'est-à-dire très "thready" .. apparemment le hasard fonctionne réellement bien. le problème est avec l'affichage de l'interface graphique, qui fait des choses amusantes et affiche une valeur intéressante. C'est donc plus un problème de threading. Je suis en train de redessiner le code maintenant. alors merci encore, et désolé de perdre votre temps.

+1

Etes-vous sûr que la méthode initializeAll() est appelée lorsque le bouton de réinitialisation est enfoncé? – Haakon

+0

@Haakon - (+1) C'était ma première estimation. Ou, si initializeAll() est appelée, l'instruction rand = new Random() est-elle touchée? – JasCav

+0

@Haakon oui, il s'appelle. l'arrêt physique de la course et la réalisation d'une nouvelle course aboutissent à des résultats cohérents. C'est juste que dans une course, quand "reset" est pressé, cela arrive. –

Répondre

0

désolé pour prendre vos gars temps. J'ai compris le problème. en ce moment, mon application est un gâchis de divers threads, swingworkers, etc., c'est-à-dire très "thready" .. apparemment le hasard fonctionne réellement bien. le problème est avec l'affichage de l'interface graphique, qui fait des choses amusantes et affiche une valeur intéressante. C'est donc plus un problème de threading. alors merci encore, et désolé de perdre votre temps.

2

Est-ce que je fais quelque chose de mal?

Oui, il semble que oui. Le Random(long) doit réinitialiser la graine à la valeur fournie. Quelle que soit l'erreur, il nous sera impossible de vous aider sans code SSCCE ou au moins plus.

Random rand = new Random(353); 
System.out.println(rand.nextInt(10)); 
System.out.println(rand.nextInt(10)); 
System.out.println(rand.nextInt(10)); 

rand = new Random(353); 
System.out.println(rand.nextInt(10)); 
System.out.println(rand.nextInt(10)); 
System.out.println(rand.nextInt(10)); 

Sortie:

7 
5 
5 
7 
5 
5 
+0

merci pour votre intérêt. cette réinitialisation se produit réellement, mais elle se produit entre les exécutions et non dans une exécution de ce projet. –