195 votes

Java Générer un nombre aléatoire entre deux valeurs données

Je voudrais savoir comment générer un nombre aléatoire entre deux valeurs données.

Je suis capable de générer un nombre aléatoire avec la méthode suivante :

Random r = new Random();

for(int i = 0; i < a.length; i++){
    for(int j = 0; j < a[i].length; j++){
        a[i][j] = r.nextInt();
    }

}

Cependant, comment puis-je générer un nombre aléatoire compris entre 0 et 100 (inclus) ?

489voto

Erik Points 38942

Vous pourriez utiliser par exemple r.nextInt(101)

Pour une expression plus générique "entre deux nombres", utilisez :

Random r = new Random();
int low = 10;
int high = 100;
int result = r.nextInt(high-low) + low;

Vous obtenez ainsi un nombre aléatoire compris entre 10 (inclus) et 100 (exclus).

1 votes

Merci - J'ai essayé mais cela ne semble pas fonctionner. J'utilise les nombres aléatoires de 0 à 100 (inclus) pour remplir un tableau multidimensionnel ; lorsque j'essaie cela, le tableau est rempli de nombres extrêmement grands et extrêmement petits. Par exemple, -3.76556749E8 3.0207573E8 2.033182079E9 -6.86227134E8.

0 votes

Montrez le reste du code. Qu'est-ce que c'est, par exemple a .

1 votes

Pourriez-vous indiquer comment vous invoquez r.nextInt() et avec quelles valeurs ?

64voto

user2512642 Points 121

En supposant que la limite supérieure est la limite supérieure et que la limite inférieure est la limite inférieure, vous pouvez créer un nombre aléatoire, r, entre les deux limites avec :

int r = (int) (Math.random() * (upper - lower)) + lower;

1 votes

C'est une exclusivité de l'étage supérieur

1 votes

Int r = (Math.random() * (upper - lower)) + inférieur ; Il serait inclusif pour inférieur. Cela pourrait être utile.

13voto

Vytautas Points 31
int Random = (int)(Math.random()*100);

si vous avez besoin de générer plus d'une valeur, alors utilisez simplement boucle for pour cela

 for (int i = 1; i <= 10 ; i++)
       {
        int Random = (int)(Math.random()*100);
        System.out.println(Random);
       }

Si vous voulez spécifier une gamme plus décente, comme de 10 à 100 ( les deux sont dans la gamme )

Le code serait donc :

   int Random =10 +  (int)(Math.random()*(91));
   /* int Random = (min.value ) + (int)(Math.random()* ( Max - Min + 1));
  *Where min is the smallest value You want to be the smallest number possible to       
  generate and Max is the biggest possible number to generate*/

3 votes

C'est peut-être un peu tard, et c'est toujours lié aux opinions et aux styles de code, mais généralement on ne crée pas une variable avec une majuscule, donc c'est "mieux" de la nommer "random" au lieu de "Random". Les classes sont généralement en majuscules :)

0 votes

Cela échouera dans le cas où max est Integer.MAX_VALUE et min est 0. Utilisez Math.round au lieu du casting en int pour résoudre ce problème.

0 votes

Conformément à la convention d'appellation Java, les noms de variables doivent commencer par une minuscule.

2voto

MAK Points 12571

Utilisez Random.nextInt(int) .

Dans votre cas, cela ressemblerait à quelque chose comme ceci :

a[i][j] = r.nextInt(101);

1voto

David Behrens Points 11

Java ne dispose pas d'un générateur d'aléas entre deux valeurs comme c'est le cas pour Python. Il ne prend en fait qu'une seule valeur pour générer le hasard. Ce que vous devez faire, alors, c'est ajouter UN CERTAIN NOMBRE au nombre généré, ce qui fera que le nombre sera dans un intervalle. Par exemple :

package RandGen;

import java.util.Random;

public class RandGen {

    public static Random numGen =new Random();

public static int RandNum(){
    int rand = Math.abs((100)+numGen.nextInt(100));

    return rand;
}

public static void main(String[]Args){
   System.out.println(RandNum());
}

}

La fonction de ce programme se trouve entièrement à la ligne 6 (celle qui commence par "int rand...". Notez que Math.abs() convertit simplement le nombre en valeur absolue, et qu'il est déclaré comme un int, ce n'est pas vraiment important. Le premier (100) est le nombre que j'ajoute au nombre aléatoire. Cela signifie que le nouveau nombre de sortie sera le nombre aléatoire + 100. numGen.nextInt() est la valeur du nombre aléatoire lui-même, et parce que j'ai mis (100) dans ses parenthèses, c'est n'importe quel nombre entre 1 et 100. Ainsi, lorsque j'ajoute 100, cela devient un nombre compris entre 101 et 200. En fait, vous ne générez pas un nombre compris entre 100 et 200, vous ajoutez à celui compris entre 1 et 100.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X