Autor Tema: Arreglos: Vectores y Matrices java y relleno con aleatorios  (Leído 7050 veces)

Mac

  • Intermedio
  • ***
  • Mensajes: 174
  • Java-Php
    • Ver Perfil
Arreglos: Vectores y Matrices java y relleno con aleatorios
« en: 19 de Septiembre 2013, 15:59 »
Hola comunidad quisiera que me ayudaran con este programa ! le agradecería muchísimo de antemano ... les presento el problema y es el siguiente , resulta que e echo gran parte del código y me falta corregir algunas cosa que so la siguiente.

- el programa arroja números aleatoria de N estudiantes que son las notas no se por que me arroja en todas las matrices 4.0 en ves de 4.2 , osea quiero que me de números aleatorios con decimales y que me muestre bien la matriz definitiva que me sale desordenada.

- otro caso seria creando un procediendo llamado estadística me saque que un alumno pierde el semestre si pierde al menos 3 asignaturas, si pierde 2 o 1, podrá habilitarlas. De acuerdo con esto, determine en otro procedimiento quienes perdieron el semestre, quienes habilitaron, y quienes no perdieron ninguna
les colocare el código !
----------------------------------------------------------------------------------------------------------------
Código: [Seleccionar]
import javax.swing.*;
import java.util.Random;
public class Menu_matriz {

    public static void main(String[] args){

        String menu=" Notas Estudiantes\n ";

        int n=Integer.parseInt(JOptionPane.showInputDialog(" Digite La Cantidad De Numeros De Estudiantes "));
       
       double p1 [][]=new double  [n][6];
       double p2 [][]=new double  [n][6];
       double p3 [][]=new double  [n][6];
       double def[][]=new double  [n][6];
       
   
       llenar_matrices(p1,p2,p3,n);
       
       int op=0;
       
       menu+="1. Calcular Y Guardar Notas. \n";
       menu+=" 2. Calcular Y Guardar Definitiva. \n";
       menu+=" 3. Perdieron,Habilitaron Y Quienes No Perdieron Ninguna. \n";
       menu+=" 4. Fin Del Menu \n";
       menu+=" Escoja Opción : \n";
       
        while (op!=4){
           
            op=Integer.parseInt(JOptionPane.showInputDialog(menu));
            switch (op){
                case 1:
                sumar(p1,p2,def,p3,n);
                break;
               
                case 2:
                imprime_definitiva(def,n,"--- MATRIZ DEFINITIVA ---");
                break;
               
                case 3:
                estadistica(      );
                break;
               
                case 4:
               
                break;
               
            }
        }
    }// cierre del  public static void main !!!!
   
    static void sumar(double p1[][], double p2[][],double def[][],double p3[][], double n1){

        for (int i=0;i<n1;i++){
            for (int j=0;j<6;j++){
            def[i][j]=(((p1[i][j]*0.3)) + ((p2[i][j]*0.3)) + ((p3[i][j]*0.4)));
           
            }
        }
        System.out.println(" ");
        System.out.println("       ------------ MATRIZ PRIMER  PARCIAL  --------------\n\n  ");
        //System.out.println("#\tMatematicas\tFisica\tInformatica\tEspañol\tFilosofia\tEstadistica");
        imprime_definitiva(p1,n1," ------------ MATRIZ PRIMER  PARCIAL  --------------");
        System.out.println("       ------------ MATRIZ SEGUNDO PARCIAL  --------------\n ");
        //System.out.println("#\tMatematicas\tFisica\tInformatica\tEspañol\tFilosofia\tEstadistica");
        imprime_definitiva(p2,n1," ------------ MATRIZ SEGUNDO PARCIAL  --------------");
        System.out.println("       ------------  MATRIZ PARCIAL FINAL  ---------------\n ");
        // System.out.println("#\tMatematicas\tFisica\tInformatica\tEspañol\tFilosofia\tEstadistica");
        imprime_definitiva(p3,n1," ------------ MATRIZ PARCIAL FINAL  ---------------");
        System.out.println("\n                 --- MATRIZ DEFINITIVA ---              "); 
        System.out.println(" ");
    }   

    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;
             
         
            }
        }
    }
   
    static void estadistica (               ){
   
   
   
   
   
   
   
   
   
   
   
   
   
   
    }

    static void imprime_definitiva(double def[][],double n,String mensaje){
       
    String salida="";
       
    for (int i=0;i<n;i++){
      for(int j=0;j<6;j++){
     
       salida=salida+def[i][j]+" \t\t ";
 
         }
         salida=salida+"\n\n";
       
        }
       
        System.out.println(salida+"\t");
       
        JTextArea area= new JTextArea();
        area.setText(salida);
        JOptionPane.showMessageDialog(null,area,mensaje,JOptionPane.PLAIN_MESSAGE);
     
    }

}/// cierre class !!!
« Última modificación: 05 de Septiembre 2014, 09:55 por Alex Rodríguez »

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 385
    • Ver Perfil
Re:Arreglos: Vectores y Matrices.
« Respuesta #1 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:

Código: [Seleccionar]
    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:

Código: [Seleccionar]
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;

            }
        }
    }


Mac

  • Intermedio
  • ***
  • Mensajes: 174
  • Java-Php
    • Ver Perfil
Re:Arreglos: Vectores y Matrices.
« Respuesta #2 en: 20 de Septiembre 2013, 14:11 »
Gracias por tu respuesta es muy buena

-Quisiera saber como hacer para que en la matriz definitiva no me salga desordenada

- otro caso seria creando un procediendo llamado estadística me saque que un alumno pierde el semestre si pierde al menos 3 asignaturas, si pierde 2 o 1, podrá habilitarlas. De acuerdo con esto, determine en otro procedimiento quienes perdieron el semestre, quienes habilitaron, y quienes no perdieron ninguna
les colocare el código !

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 385
    • Ver Perfil
Re:Arreglos: Vectores y Matrices.
« Respuesta #3 en: 20 de Septiembre 2013, 14:50 »
¿A qué te refieres con que la matriz definitiva sale desordenada?

Mac

  • Intermedio
  • ***
  • Mensajes: 174
  • Java-Php
    • Ver Perfil
Re:Arreglos: Vectores y Matrices.
« Respuesta #4 en: 20 de Septiembre 2013, 15:19 »
si la matriz donde dice MATRIZ PARCIAL FINAL   sale a si 2.9999999 en todas las columnas obviamente con números distintos y la MATRIZ DEFINITIVA sale también así desordenada !

- otro caso seria creando un procediendo llamado estadística me saque que un alumno pierde el semestre si pierde al menos 3 asignaturas, si pierde 2 o 1, podrá habilitarlas. De acuerdo con esto, determine en otro procedimiento quienes perdieron el semestre, quienes habilitaron, y quienes no perdieron ninguna
les colocare el código !

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 385
    • Ver Perfil
Re:Arreglos: Vectores y Matrices.
« Respuesta #5 en: 20 de Septiembre 2013, 22:01 »
No entiendo lo que quieres decir con desordenada, si te refieres a que se muestran los números con muchos decimales ¿ese es el mismo problema que te he indicado antes que se resolvía con x = (double)Math.round(x * 1000) / 1000; ? Si es el mismo problema te basta con aplicar esto pero no sé si te refieres a otra cosa.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".