Identificarte

Versión Completa : Ayuda con java


Sponsored links
.




equalizer
julio 17, 2006, 11:36
Hola gente:
Tengo un pequeño problema con java. Resulta que no me funcionan los moldeados(casts) cuando intento aplicarlos a la función random de la clase Math,es decir
(int)Math.random() no logra convertir los números double generados por la función a números enteros. La clase compila y ejecuta normalmente, pero a la hora de visualizar el
array solo salen 0's, por ningún lado aparecen los supuestos números que debío generar la función convertidos en enteros. ¿porqué pasa eso?

suerte pues :-p

Grissom.
julio 18, 2006, 07:49
Hola, bienvenido a LANeros.

Estimado, recuerda que la función Math.random() de Java retorna un valor mayor o igual a cero, y menor a 1. Al hacerle casting a entero siempre te retornará 0. Lo que te recomiendo es multiplicar el resultado de la función por un valor según desees el rango, por ejemplo: si deseas números aleatoreos del 1 al 100 multiplicas por 100, así: (int)(Math.random() * 100 + 1).

chuidiang
julio 18, 2006, 07:53
Hola:

Math.random() te devuelve un número entre 0.0 y 1.0 (excluido el 1.0). El cast a int lo "trunca", es decir, devuelve el número sin decimales, es decir, siempre devuelve 0.

Si quieres un número, por ejemplo, entre 0 y 10, haz esto

(int)(Math.random()*11)

Esto devolverá un número entre 0.0 y 11.0 excluido el 11.0. Al "truncar", quedará entre 0 y 10.

Quizás, aunque esté en C, te venga bien este tutorial sobre números aleatorios (http://www.chuidiang.com/clinux/funciones/rand.html), puesto que la problemática es la misma.

Se bueno.

equalizer
julio 18, 2006, 10:21
El método que estoy utilizando es este:
static void genMat(int[][] a)
{
int i,j;
final int N = 8;
for(i=0; i<a.length; i++)
{
for(j=0; j<a[i].length; j++)
{
a[i][j] = (int)Math.random() * N;
}
}
}

pero igual sigo teniendo el mismo resultado

Grissom.
julio 18, 2006, 10:41
Precedencia de operadores:


static void genMat(int[][] a)
{
int i,j;
final int N = 8;
for(i=0; i<a.length; i++)
{
for(j=0; j<a[i].length; j++)
{
a[i][j] = (int)(Math.random() * N);
}
}
}

equalizer
julio 18, 2006, 01:38
Gracias El_Rulas, ya había descubierto el error