2010-03-14 21 views
31

¿Qué método devuelve un int aleatorio entre un mínimo y máximo? ¿O no existe ese método?¿Cómo puedo generar un entero aleatorio entre min y max en java?

Lo que estoy buscando es algo como esto:

NAMEOFMETHOD (min, max) 

(donde min y max son int s)

que devuelve soemthing así:

8 

(al azar)

Si tal método existe, ¿podría enlazar al th documentación relevante con su respuesta. Gracias.

Actualización: atempting para implementar la solución completa en la respuesta nextInt tengo esto:

class TestR 
{ 
    public static void main (String[]arg) 
    { 
     Random random = new Random() ; 
     int randomNumber = random.nextInt(5) + 2; 
     System.out.println (randomNumber) ; 
    } 
} 

sigo teniendo los mismos errores del compilador:

TestR.java:5: cannot find symbol 
symbol : class Random 
location: class TestR 
     Random random = new Random() ; 
     ^
TestR.java:5: cannot find symbol 
symbol : class Random 
location: class TestR 
     Random random = new Random() ; 
          ^
TestR.java:6: operator + cannot be applied to Random.nextInt,int 
     int randomNumber = random.nextInt(5) + 2; 
             ^
TestR.java:6: incompatible types 
found : <nulltype> 
required: int 
     int randomNumber = random.nextInt(5) + 2; 
              ^
4 errors 

lo que va mal aquí ?

+0

¿Ha olvidado para declarar 'random' y asignar una nueva instancia de' java.util.Random' a ella? – MAK

+0

¿podría explicarme cómo hacerlo? – David

+0

¿Declaraste sentencias de importación para java.util?Aleatorio – Shashi

Respuesta

104

construir un objeto aleatorio al inicio de la aplicación:

Random random = new Random(); 

A continuación, utilice Random.nextInt(int):

int randomNumber = random.nextInt(max + 1 - min) + min; 

Tenga en cuenta que los límites inferior y superior tanto están incluidos.

+0

He actualizado la pregunta con el error que se produce cuando trato de hacer eso, ¿qué está mal? – David

+2

David, necesitas crear una instancia primero. 'Aleatorio aleatorio = nuevo Aleatorio();' Todavía está * solo * código Java. No hay medios para la magia;) – BalusC

+2

Y asegúrese de que solo crea una instancia del objeto Random una vez y reutilícelo. No cree un nuevo objeto aleatorio para cada llamada a su función. –

15

Puede usar Random.nextInt(n). Esto devuelve un int aleatorio en [0, n). Simplemente usar max-min + 1 en lugar de n y agregar min a la respuesta dará un valor en el rango deseado.

+0

he actualizado la pregunta con error que ocurre cuando intento hacer eso que está yendo mal? – David

-2

Esto genera un entero aleatorio de tamaño psize

public static Integer getRandom(Integer pSize) { 

    if(pSize<=0) { 
     return null; 
    } 
    Double min_d = Math.pow(10, pSize.doubleValue()-1D); 
    Double max_d = (Math.pow(10, (pSize).doubleValue()))-1D; 
    int min = min_d.intValue(); 
    int max = max_d.intValue(); 
    return RAND.nextInt(max-min) + min; 
} 
+2

Parece una forma compleja de lograr algo que se puede hacer en una sola línea de código. Utilice el formato de código en el futuro. –

5
public static int random_int(int Min, int Max) 
{ 
    return (int) (Math.random()*(Max-Min))+Min; 
} 

random_int(5, 9); // For example 
+0

Su _algoritmo_ es aleatorio x * número positivo + número positivo. ¿Cómo puede esto dar como resultado siempre un número entre max y min? – Ruben

+1

Aleatorio es entre 0 y 1. Haz los cálculos. –

+0

Tenga en cuenta que el límite inferior es inclusivo, pero el límite superior es exclusivo en esta respuesta. Si desea que ambos sean inclusivos, use: return (int) (Math.random() * (Max-Min + 1)) + Min; – Synn

0

Utilización de la clase Random es el camino a seguir como se sugiere en la respuesta aceptada, pero aquí es una forma correcta de menos recta de avance de hacer que si no quería crear un nuevo objeto aleatoria:

min + (int) (Math.random() * (max - min + 1)); 
3

Como las soluciones anteriores no tienen en cuenta la posible desbordamiento de hacer max-min cuando min es n egative, aquí otra solución (similar a la de Kerouac)

public static int getRandom(int min, int max) { 

     if (min > max) { 
      throw new IllegalArgumentException("Min " + min + " greater than max " + max); 
     } 

     return (int) ((long) min + Math.random() * ((long)max - min + 1)); 
    } 

esto funciona incluso si usted lo llama con:

getRandom(Integer.MIN_VALUE, Integer.MAX_VALUE) 
Cuestiones relacionadas