Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Module : java.base - Package : java.lang - Classe : Math
Version documentée : Java SE 17

Méthode « Math.random »

Signature

public static double random();

Description

Cette méthode renvoie une valeur pseudo-aléatoire, typée double, supérieure ou égale à 0 et strictement inférieure à 1. Dit autrement, la valeur calculée sera comprise dans l'intervalle [0, 1[.

on parle de valeur pseudo-aléatoire, car actuellement on ne sait pas réellement obtenir une valeur parfaitement aléatoire en informatique. Pour s'en rapprocher, on utilise un algorithme mathématique de génération d'une séquence de valeurs présentant les propriétés du hasard. L'algorithme utilisé par Java garantie une distribution quasi uniforme des valeurs dans l'intervalle considéré.

Lors du premier appel, l'algorithme utilisé est initialisé avec un timestamp (une information temporelle relativement précise) garantissant ainsi la production d'une séquence différente de l'exécution précédente. Cette initialisation y est réalisée en instanciant un objet de type java.util.Random.

les deux séquences de codes suivantes produisent donc le même type de résultats.
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
import java.util.Random;

public class Sample {
    
    public static void main( String[] args ) {
        
        // Première séquence de code en utilisant Math.random().
        for( int i=0; i<5; i++ ) {
            System.out.println( Math.random() );
        }
        
        
        // Seconde séquence de code en utilisant la classe Random.
        Random random = new Random();
        for( int i=0; i<5; i++ ) {
            System.out.println( random.nextDouble() );
        }
    }
    
}
Deux techniques équivalentes pour obtenir des valeurs pseudo-aléatoires dans l'intervalle [0, 1[

De plus l'algorithme utilisé est « thread-safe » : cela signifie que plusieurs appels à la méthode random peuvent être lancés en parallèle (par différents threads).

Paramètres

Cette méthode n'accepte aucun paramètre.

Valeur de retour

La valeur de retour est de type double. Elle correspond en une valeur flottante pseudo-aléatoire, typée double, supérieure ou égale à 0 et strictement inférieure à 1.

Exemple de code

L'exemple de code proposé ci-dessous est un petit jeu : il permet de compter le nombre de coups mit à l'utilisateur pour retrouver une valeur entière aléatoire comprise entre 1 et 100.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
 35 
 36 
 37 
 38 
 39 
 40 
 41 
 42 
 43 
 44 
package fr.koor.samples;

import java.util.Scanner;

public class MegaGame {

    public static void main( String[] args ) {
        
        System.out.println( "Bienvenue dans MegaGame V1.0" );
        
        // Le scanner est utilisé pour décoder les informations saisies sur la console.
        try ( Scanner scanner = new Scanner( System.in ) ) {
            
            // On calcule une valeur entière aléatoire comprise entre 1 et 100.
            int randomValue = 1 + (int) ( Math.random() * 100 );
            // System.out.println( "For debug: randomValue == " + randomValue );
            
            // Pour compter le nombre de tentatives pour trouver la valeur aléatoire.
            int score = 0;
            
            while( true ) {
                // On demande la saisie d'un nombre entier
                System.out.print( "Veuillez saisir une valeur entière (1..100) : " );
                int value = scanner.nextInt();
                score++;
                
                // On vérifie la saisie
                if ( value == randomValue ) {
                    System.out.println( "Bravo, vous avez trouvé en " + score + " coup(s)." );
                    break;
                } else if ( value < randomValue ) {
                    System.out.println( "La valeur à trouver est plus grande." );
                } else {
                    System.out.println( "La valeur à trouver est plus petite." );
                }
            }
         
        }
        
        System.out.println( "Merci d'avoir joué et à bientôt." );
        
    }
    
}
Exemple d'utilisation de la méthode Math.random()

Et voici un exemple d'utilisation de ce programme.

Bienvenue dans MegaGame V1.0
Veuillez saisir une valeur entière (1..100) : 50
La valeur à trouver est plus petite.
Veuillez saisir une valeur entière (1..100) : 25
La valeur à trouver est plus grande.
Veuillez saisir une valeur entière (1..100) : 35
Bravo, vous avez trouvé en 3 coup(s).
Merci d'avoir joué et à bientôt.

Disponible depuis

1.0

Voir aussi

La méthode Random.nextDouble
La fonction rand en C
La fonction random en Python