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

1 Respuesta

5.225 pts. Programador en Java, llevo algo de tiempo, tambien en...
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