Matriz

Toy necesitando hacer un programa de una matriz cuadrada de n por n... Ya lo tengo echo... Y cuando tengo que hacer el toString() para que m muestra los elemento de la matriz m los muestra así
Fila 0 - Columna 0 : 4
Fila 0 - Columna 1 : 34
Fila 0 - Columna 2 : 434
Fila 1 - Columna 0 : 45675
Fila 1 - Columna 1 : 3213
Fila 1 - Columna 2 : 123
Fila 2 - Columna 0 : 324
Fila 2 - Columna 1 : 312
Fila 2 - Columna 2 : 35
Y yo quiero por ejemplo que m los muestre así
      0 1 2
0 1 43 45
1 23 41 4
2 5 2 5
¿Me podrías ayudar a hacerlo?

1 Respuesta

Respuesta
1
Pues, mira, checate este codigo, haber si te sirve, yo lo hice con un arreglo fijo, pero bueno, tu ya le haras las modificaciones pertinentes
char arreglo[][] = {
                {'a','b','c','d','e','f','g','h','i','j'},
                {'a','b','c','d','e','f','g','h','i','j'},
                {'a','b','c','d','e','f','g','h','i','j'},
                {'a','b','c','d','e','f','g','h','i','j'},
                {'a','b','c','d','e','f','g','h','i','j'},
                {'a','b','c','d','e','f','g','h','i','j'},
                {'a','b','c','d','e','f','g','h','i','j'},
                {'a','b','c','d','e','f','g','h','i','j'},
                {'a','b','c','d','e','f','g','h','i','j'},
                {'a','b','c','d','e','f','g','h','i','j'},
        };
        for(int i=0;i<arreglo.length;i++){
            System.out.print(i+" ");
            for(int j=0;j<arreglo.length;j++){
                    if(i==0)System.out.print((j+1)+" ");
                    else System.out.print(arreglo[j]+" ");
            }
            System.out.println();
        }
Ahí t paso las clases.. y vos te fijas si podes arreglármelo... ¿pued ser?.. crea nuevas clases comunes con los nombres qdice ahí y t va a funcionar.. gracias y disculpa
****Principa****
public class Principal
{
    Matriz mat;
    public static void main(String []args)
    {        
        int op;
        do
        {
            System.out.println("\nIngrese la opcion que desea realizar: ");
            System.out.println("\n1)Cargar Matriz: ");
            System.out.println("\n2)Salir: ");
            op=Consola.readInt();
            switch(op)
            {
                case 1: cargar();
                        break;
                case 2: break;
                default: System.out.print("No hay opción con ese número");
            }
        }
        while(op!=2);
    }  
    public static void cargar()
    {
        int n, f, c, op;
        System.out.print("Ingrese la cantidad de Filas (Recuerde que es una matriz cuadrada): ");
        n= Consola.readInt();
        Matriz mat=new Matriz(n);
        for(int i=0; i<n; i++)
        {
            for (int j=0; j<n; j++)
            {
                 System.out.println("Ahora ingrese los números de la matriz. Fila "+i+", Columna "+j+":");
                 f=Consola.readInt();
                 mat.setNumeros(i,j,f);
            }
        }
        do
        {
            System.out.println("\nIngrese la opcion que desea realizar con la matriz: ");
            System.out.println("\n1)Mostrar todos los elementos: ");
            System.out.println("\n2)Mostrar la acumulación de los elementos ubicados en el 'triángulo superior' de la matriz: ");
            System.out.println("\n3)Mostrar el promedio de los valores contenidos en la diagonal principal: ");
            System.out.println("\n4)La cantidad de valores no negativos que hay en el 'triángulo inferior' de la matriz: ");
            System.out.println("\n5)Salir");
            op=Consola.readInt();
            switch(op)
                {
                    case 1: mat.mostrarMatriz();;
                            break;
                    case 2: System.out.println("Elementos acumulados en el triángulo superior: "+mat.superior());
                            break;
                    case 3: System.out.println("Promedio de la diagonal: "+mat.diagonal());
                            break;        
                    case 4: System.out.println("Cantidad de números negativos en el triángulo inferior: "+mat.inferior());
                            break;
                    case 5: break;       
                    default: System.out.print("No hay opción con ese número");
                }
        }
        while(op!=5);
    }
}
****Matriz****
public class Matriz
{
    private int mat[][];
    public Matriz(int n)
    {
        if(n<0) n=4;
        mat = new int[n][n];
    }
    public void setNumeros(int i,int j, int num)
    {
        mat[j]=num;
    }
    public void mostrarMatriz()
    {
        int n= mat.length;
        for(int i=0; i<n; i++)
        {
            for (int j=0; j<n; j++)
            {
                System.out.println("Fila "+i+" Columna "+j+" :"+mat[j]);
            }
        }
    }
    public int superior()
    {
        int n= mat.length;
        int acum=0;
        for(int i=0; i<n-1; i++)
        {
            for(int j=i+1;j<n;j++)
            {
                acum+=mat[j];
            }
        }
        return acum;
    }
    public double diagonal()
    {
        int i, acum=0;
        double prom;
        int n= mat.length;
        for(i=0;i<n;i++)
        {
            acum+=mat;
        }
        prom= acum/n;
        return prom;
    }
    public int inferior()
    {
        int cont=0;
        int n= mat.length;
        for(int i=1; i<n; i++)
        {
            for(int j=0;j<n-1;j++)
            {
                if(mat[j]<0)
                {
                    cont++;
                }
            }
        }
        return cont;
    }
}
****Consola****
public class Consola
{
    /*
     * 1) Todos los métodos de esta clase son estáticos, y por lo tanto pueden ser invocados sin tener que crear objetos de la clase. Es
     * suficiente con nombrar la clase al invocar el método:   int x = Consola.readInt();
     */
    /**
     * Lee un string desde teclado. El string termina con un salto de linea
     * @return el string leido (sin el salto de linea)
    */
    public static String readLine()
    {
       int ch;
       String r = "";
       boolean done = false;
       while (!done)
       {
        try
        {
            ch = System.in.read();
            if (ch < 0 || (char)ch == '\n') { done = true; }
            else
            {
                 if ((char)ch != '\r') { r = r + (char) ch; }
            }
        }
        catch(java.io.IOException e)
        {
            done = true;
        }
       }
       return r;
    }
    /**
     * Lee un integer desde teclado. La entrada termina con un salto de linea
     * @return el valor cargado, como un int
     */
    public static int readInt()    
    {
       while(true)
       {
          try
          {
              return Integer.parseInt(readLine().trim());
          }
          catch(NumberFormatException e)
          {
              System.out.println("No es un integer. Por favor, pruebe otra vez!");
          }
       }
    }
    /**
     * Lee un double desde teclado. La entrada termina con un salto de linea
     * @return el valor cargado, como un double
     */
    public static double readDouble()
    {
       while(true)
       {
           try
           {
              return Double.parseDouble(readLine().trim());
           }
           catch(NumberFormatException e)
           {
              System.out.println("No es un flotante. " + "Por favor, pruebe otra vez!");
           }
       }
    }
}
Ah pues mira, lo que tienes que cambiar es tu método mostrarMatriz (que según tu, al principio me dijiste que era toString()... no importa)en lugar de contener:
public void mostrarMatriz()
    {
        int n= mat.length;
        for(int i=0; i<n; i++)
        {
            for (int j=0; j<n; j++)
            {
                System.out.println("Fila "+i+" Columna "+j+" :"+mat[j]);
            }
        }
    }
Todo esta bien, sin embargo para mostrarlo de forma distinta, cambia los ciclos a como yo los había puesto... es más, para que veas como se refleja, crea un nuevo método después de ese, ponle... mmm toString() ! (Jaja que ingenioso, o ponle el nombre que quieras), mira, añádelo como lo pongo a continuación, ya adecuado a tu clase:
public void toString( )  {
        int n = mat.length;
       for(int i = 0 ; i < n ; i++){
            System. Out. Print(i + " "); // esto te va a imprimir el numero de columna, es decir a la izquierda
            for(int  j = 0 ; j < n ; j++){
                    if ( i == 0){
                           System.out.print(( j + 1 ) + " ");
                    }
                    else {
                           System.out.print( mat [ j ] + " ");
                    }
            }
            System. Out. Println(); //esto hara que despues de imprimir una fila, salte una linea
        }
    }
Solo añadelo a tu codigo Matriz, despues del metodo mostrarMatriz, e invocalo, a ver que salida te da, suerte!
0 1 2 3
1 [I@1b5340c [I@16c163f [I@12884e0
2 [I@1b5340c [I@16c163f [I@12884e0
Eso m apareció cuando invoque el código qm pasaste:s... ahora voy a tratar de ver como hago para solucionarlo.. gracias... si m podes ayudar te taria muy agradecido
así quedo el código copiado:
public void mostrarMatriz()
    {
        int n = mat.length;
        for(int i = 0 ; i < n ; i++){
            System.out.print(i + " ");     // esto te va a imprimir el numero de columna, es decir a la izquierda
            for(int  j = 0 ; j < n ; j++){
                if ( i == 0){
                    System.out.print(( j + 1 ) + " ");
                }
                else {
                    System.out.print( mat [ j ] + " ");
                }
            }
            System.out.println();         //esto hara que despues de imprimir una fila, salte una linea
        }
    }
Pues mi amigo, eso ya es error desde tu código, me sorprendió bastante el error que mencionas, pero cuando ejecuto tu código (soy sincero, no lo ejecute antes) y muestro el contenido con el método que construiste originalmente, me saca a pantalla esto:
Fila 0 Columna 0 :[I@923e30
Fila 0 Columna 1 :[I@130c19b
Fila 0 Columna 2 :[I@1f6a7b9
Fila 0 Columna 3 :[I@7d772e
Fila 0 Columna 4 :[I@11b86e7
Fila 1 Columna 0 :[I@923e30
Fila 1 Columna 1 :[I@130c19b
Ahora... la solución es la siguiente, y el mismo error nos paso a ambos... y a mi más feo, porque copie código tuyo y ya no lo revise... en la linea del método mostrarMatriz, tu pones:
System.out.println("Fila " + i + " Columna " + j + " :" + mat[ j ] );
Cuando es: aquí faltaba un indice
System.out.println("Fila " + i + " Columna " + j + " :" + mat [ i ]  [ j ] );
¿Ves la diferencia? Te falta un indice de tu arreglo... y bueno, en el método que te pase es el mismo error... eso pasa cuando haces copiar/pegar... en fin espero que con esto ya quede tu código, haz lo mismo para los demás errores que te puedan salir, siempre checa que estén tus dos indices, el de filas y el de columnas, suerte!
Me has ayudado a entender unas cosas que m salían mal sobre vectores... pero no pude hacer qlos elementos de la matriz se muestren como yo quería.. pero no hay drama... gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas