2012-05-14 6 views
0

Je veux générer des doubles aléatoires et les ajouter dans une liste de tableaux, mais il semble que la fonction nextDouble() retourne un double à chaque fois unique, non un nouveaujava générateur aléatoire

Random r = new Random(); 
ArrayList<Pair> centers = new ArrayList<Pair>(); 
ArrayList<ArrayList<Pair>> classes = new ArrayList<ArrayList<Pair>>(); 
for (int i=0 ; i < 100; i++) { 
    // Random r = new Random(); 
    // System.out.println (r.nextDouble()) ; 
    double a = r.nextDouble() * 10; 
    double b = r.nextDouble() * 10; 
    centers.add (new Pair (a, b)); 
    System.out.println (centers); 
}    

Quelqu'un peut-il aider moi avec ça? Est-ce une erreur d'optimisation?

+0

Que faire si vous repassez 'r = new Random();' après avoir appeler? 'Random r = nouveau Random(); double a = r.nextDouble() * 10; r = nouveau Aléatoire(); double b = r.nextDouble() * 10; ' – sp00m

+3

Que voulez-vous dire par" pas un nouveau "? 'nextDouble' renvoie un' double' unique, comme il se doit .. –

+0

Encore une fois mêmes résultats :( –

Répondre

4

j'ai couru ce code:

public static void main(String[] args) { 
    Random r = new Random(); 
    ArrayList<Pair> centers = new ArrayList<Pair>(); 
    for(int i = 0; i < 100; i++) { 
    double a = r.nextDouble() * 10; 
    double b = r.nextDouble() * 10; 
    centers.add(new Pair(a, b)); 
    } 
    System.out.println(centers); 
} 

Ce fut la sortie:

[(8.08, 8.06), (9.97, 1.83), (3.83, 3.19), (2.97, 2.51), (9.40, 2.88), (7.78, 2.59), (1.67, 9.07) ... 

est-ce pas ce que vous voulez? Pour votre information, c'est la classe Pair je:

class Pair { 
    private final double a, b; 
    Pair(double a, double b) { this.a = a; this.b = b; } 
    @Override public String toString() { return String.format("(%.2f, %.2f)", a, b); } 
}