2011-03-11 75 views
85

Me gustaría saber cómo generar un número aleatorio entre dos valores dados.Java Generar número aleatorio entre dos valores dados

soy capaz de generar un número aleatorio con lo siguiente:

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(); 
    } 

} 

Sin embargo, ¿cómo puedo generar un número aleatorio entre 0 y 100 (ambos inclusive)?

Gracias a todos.

Respuesta

278

Podría usar, p. r.nextInt(101)

Para una más genérica "entre dos números de" uso:

Random r = new Random(); 
int Low = 10; 
int High = 100; 
int Result = r.nextInt(High-Low) + Low; 

Esto le da un número al azar entre el 10 (ambos inclusive) y 100 (exclusivo)

+1

Gracias - he intentado eso, pero no parece funcionar. Estoy usando los números aleatorios de 0 a 100 (inclusive) para poblar una matriz multidimensional; al intentar esto, rellena la matriz con números extremadamente grandes y extremadamente pequeños. Por ejemplo, -3.76556749E8 3.0207573E8 2.033182079E9 -6.86227134E8. – MusTheDataGuy

+0

Muestra el resto del código. ¿Qué es, por ejemplo,? 'a'. – Erik

+0

Gracias, he logrado que esto funcione ahora. Muchas gracias! – MusTheDataGuy

7

Er ...

int Random = (int)(Math.random()*100); 

Si necesita generar más de un valor, a continuación, sólo tiene que utilizar para el lazo para ese

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

Si desea especificar un rango más decente, como de 10 a 100 (ambos ar e en el rango)

lo que el código sería:

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*/ 
+1

Tal vez un poco tarde, y siempre está sujeto a las opiniones y el código estilos, pero generalmente no crea una variable con mayúscula, por lo que es "mejor" nombrarla "aleatoria" en lugar de "Aleatoria". Las clases suelen ser mayúsculas :) –

+0

Esto fallará en caso de que max sea Integer.MAX_VALUE y min sea 0. Utilice Math.round en lugar de convertir a int para resolver eso. – Krease

+0

Con respecto a la convención de nomenclatura de Java, los nombres de las variables deben comenzar con el carácter minúsculo – Jens

1

Java no tiene un generador aleatorio entre dos valores de la misma manera que Python hace. En realidad, solo se necesita un valor para generar el Aleatorio. Lo que debe hacer, entonces, es agregar UN NUMERO DE SEGURIDAD al número generado, lo que hará que el número se encuentre dentro de un rango. Por ejemplo:

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()); 
} 

}

función de este programa se encuentra en su totalidad en la línea 6 (El que comienza con "int rand ..." Tenga en cuenta que Math.abs() simplemente convierte el número en valor absoluto. , y se declara como int, eso no es realmente importante. El primero (100) es el número que AGREGO al azar. Esto significa que el nuevo número de salida será el número aleatorio + 100. numGen.nextInt() es el valor del número aleatorio en sí mismo, y como puse (100) entre paréntesis, es cualquier número entre 1 y 100. Por lo tanto, cuando agregue 100, se convierte en un número entre 101 y 200. En realidad no está GENERANDO un número entre 100 y 200, está agregando al que está entre 1 y 100.

1

Uno puede también tratar a continuación:

public class RandomInt { 
    public static void main(String[] args) { 

     int n1 = Integer.parseInt(args[0]); 
     int n2 = Integer.parseInt(args[1]); 
     double Random; 

     if (n1 != n2) 
     { 
      if (n1 > n2) 
      { 
       Random = n2 + (Math.random() * (n1 - n2)); 
       System.out.println("Your random number is: " + Random); 
      } 
      else 
      { 
       Random = n1 + (Math.random() * (n2 - n1)); 
       System.out.println("Your random number is: " +Random); 
      } 
     } else { 
      System.out.println("Please provide valid Range " +n1+ " " +n2+ " are equal numbers."); 
     }      
    } 
} 
+3

Bit detallado y torpe. No debería necesitar repetir ese código, solo para decidir si primero tiene valor n1 o n2. – itsbruce

+0

Con respecto a la convención de nomenclatura de Java, los nombres de las variables deben comenzar con el carácter en minúscula – Jens

33

Suponiendo que la parte superior es el límite superior e inferior es el límite inferior, entonces puede presentar un número aleatorio, r, entre los dos límites con:

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

Esto es exclusivo de la parte superior – Rizon

+1

int r = (Math.random() * (superior - inferior)) + inferior; Sería inclusivo para más bajo. Puede ser útil. –

4

Así,

Random random = new Random(); 
int randomNumber = random.nextInt(upperBound - lowerBound) + lowerBound; 
Cuestiones relacionadas