2010-10-18 18 views
5

Hasta ahora tengo este código¿Cómo puedo generar un número aleatorio en Java entre 450 y 150 que es un múltiplo de 10?

int w = (int)((450-150)*random()+150); 

Esto genera un número entre 450 y 150 ... Pero no tengo ni idea de cómo hacer que el número múltiplo de 10.

+0

OMG. Parece un montón de respuestas. :) – ivorykoder

+3

@Greg D - No hay nada en esto que me huela a la tarea. Además, esto está lejos de ser una pregunta "dame el código". El OP obviamente tiene algo que funciona ... solo necesitaba el último paso. Ciertamente, no hay razón para volver a traer la etiqueta 'olores-como-tarea'. –

+3

sí, es tarea ... ¿Hay algo mal con eso teniendo en cuenta que estoy demostrando que hice un poco de mi propio trabajo? – Cheesegraterr

Respuesta

13

fácil. Sólo generar números aleatorios entre 15 y 45 ... luego se multiplica por 10:

int w = ((int)((45 - 15) * random() + 15)) * 10; 
+5

¿Cómo es esta la respuesta correcta? Dado que se multiplica por 10 antes de truncar a un número entero, no produce múltiplos de 10. – Gabe

+0

Estoy de acuerdo, eso es un error –

+1

@Gabe - Se corrigieron los paréntesis. –

11

elegir un número aleatorio entre 45 y 15 y se multiplica con 10 -

int w = (int)((45-15)*random()+15) * 10; 
4

Sólo tiene que elegir un entero aleatorio entre 15 y 45, y luego se multiplica por 10:

int w = 10*(int)((45-15)*random()+15);

7

Esto huele a la tarea, pero voy a morder:

En lugar de comenzar desde una amplia gama de números aleatorios y limitar el resultado, considere comenzar desde un rango estrecho de números y expandir el resultado.

Su código debe generar uno de aproximadamente 30 valores, ¿verdad? Intenta generar un valor aleatorio entre 0 y 30, y luego transforma ese valor en el rango que necesites.

(I sugeriría multiplicando por 10 y la adición de 150.)

+1

+1: IMO, esta es la manera más clara de caracterizar el problema. – Ani

1

Si, como sospecho, la OP necesita un rango inclusivo en ambos extremos: necesita tanto los números 150 y 450, hay un error de rango en las respuestas que he visto hasta ahora.

Math.random() devuelve un número entre 0.0 (inclusive) y 1.0 (exclusivo). Si desea un número entre 15 y 45 (ambos inclusive), su rango de valores es en realidad (45 - 15 + 1) ... es decir, un total de 31 valores.

El código correcta debe ser:

int w = ((int)(((45 - 15 + 1) * random()) + 15)) * 10; 

(45 - 15 + 1) * random() = [0.0..30.999999)
[0..31) + 15 = [15,0 .. 45.999999)
(int) [15.0..46.0) = [15..45] - la conversión entera es un truncamiento, no un redondeo
[15..45] * 10 = {150, 160, 170, 180, ..., 440, 450}

Cuestiones relacionadas