300
« en: 20 de Septiembre 2013, 09:27 »
Hola, el motivo por el que te arroja números como 4.0 en vez de 4.2 lo tienes en el método llenar_matrices:
static void llenar_matrices(double p1[][], double p2[][], double p3[][],double n1){
Random rnd = new Random();
for (int i=0;i<n1;i++){
for (int j=0;j<6;j++){
p1[i][j]=(int)(rnd.nextDouble()* 5)+1;
p2[i][j]=(int)(rnd.nextDouble()* 5)+1;
p3[i][j]=(int)(rnd.nextDouble()* 5)+1;
}
}
}
Si te fijas la instrucción (int)(rnd.nextDouble()* 5)+1; al llevar el (int) delante lo que hace es redondear el número obtenido a un entero, por eso siempre te sale 4.0, 5.0, etc.
Para redondear un número tipo double a cierto número de decimales puedes usar lo siguiente:
Por ejemplo para una variable x = 3.235645678;
x = (double)Math.round(x * 1000) / 1000; En este caso lo que haces es primero multiplicar por 1000 para obtener 3235.645678. Luego redondeas aplicando el método round de la clase Math que te devuelve 3236. Luego divides 3236 entre 1000 para obtener 3.2336 que es el resultado. El número de ceros que pongas en la multiplicación es el número de decimales que obtienes.
Si haces x = (double)Math.round(x * 10) / 10; obtendrás 3.2
Si haces x = (double)Math.round(x * 100) / 100; obtendrás 3.23
En el método llenar_matrices el cambio podría hacerse así para que te muestre los números con un decimal:
static void llenar_matrices(double p1[][], double p2[][], double p3[][],double n1){
Random rnd = new Random();
for (int i=0;i<n1;i++){
for (int j=0;j<6;j++){
p1[i][j]=(rnd.nextDouble()* 5)+1; p1[i][j]=(double)Math.round(p1[i][j] * 10) / 10;
p2[i][j]=(rnd.nextDouble()* 5)+1; p2[i][j]=(double)Math.round(p2[i][j] * 10) / 10;
p3[i][j]=(rnd.nextDouble()* 5)+1; p2[i][j]=(double)Math.round(p3[i][j] * 10) / 10;
}
}
}