Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Invertir una matriz

Estas en el tema de Invertir una matriz en el foro de Java en Foros del Web. A la hora de pasar los datos a la matriz invertida por el método "invertMatriz", no funciona. Código: /* * To change this template, choose ...
  #1 (permalink)  
Antiguo 12/12/2013, 03:10
 
Fecha de Ingreso: diciembre-2013
Mensajes: 36
Antigüedad: 10 años, 5 meses
Puntos: 1
Pregunta Invertir una matriz

A la hora de pasar los datos a la matriz invertida por el método "invertMatriz", no funciona.

Código:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package invertirmatriz;
import java.util.*;
/**
 *
 * @author mati
 */
public class InvertirMatriz {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner teclado=new Scanner(System.in);
        int n=0, m=0;
        
        System.out.println("Filas que tendrá la matriz.");
        n=teclado.nextInt();
        
        System.out.println("Columnas que tendrá la matriz.");
        m=teclado.nextInt();
        
        int[][] mxn = new int[n][m];
        int[][] destino = new int[m][n];
        
        introMatriz(mxn, n, m);
        muestraMatriz(mxn);
        destino=invertMatriz(mxn, n, m);
        muestraMatriz(destino);
    }
    
    public static void introMatriz(int [][]mxn, int n, int m){
        int i, j;
            for (i = 0; i < n; i++) {
            for (j = 0; j < m; j++) {
                mxn[i][j] = (int)(Math.random()*9 + 1);
                }
            }
    }
    
    public static void muestraMatriz(int [][]m){
        int i, j;        
        for(i=0;i<m.length;i++) {
            System.out.print("\n");
            for(j=0;j<m[i].length;j++){
                System.out.print(m[i][j]+" ");
            }
        }
        System.out.print("\n");
    }
    
    public static int[][] invertMatriz(int [][]mxn, int n, int m){
        
        int[][] destino = new int[m][n];
        
        for(int fil=0;fil<n;fil++){
            for(int col=0;col<m;col++){
                
                destino[fil][col]=mxn[col][fil];
        }
        }
        return destino;        
    
        }
}
  #2 (permalink)  
Antiguo 12/12/2013, 03:23
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 4 meses
Puntos: 22
Respuesta: Invertir una matriz

Saludos de nuevo Silver,

¿No te funciona? Yo he probado y me ha funcionado correctamente, que error te da?

Un saludo.
  #3 (permalink)  
Antiguo 12/12/2013, 03:34
 
Fecha de Ingreso: diciembre-2013
Mensajes: 36
Antigüedad: 10 años, 5 meses
Puntos: 1
Respuesta: Invertir una matriz

Me sale este mensaje y no me muestra la matriz invertida.

Cita:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at invertirmatriz.InvertirMatriz.invertMatriz(Inverti rMatriz.java:62)
at invertirmatriz.InvertirMatriz.main(InvertirMatriz. java:31)
Java Result: 1
Se ve que falla a la hora de pasar los datos de una matriz a otra. O al retornar la matriz, no se... :S
  #4 (permalink)  
Antiguo 12/12/2013, 03:59
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 4 meses
Puntos: 22
Respuesta: Invertir una matriz

Ah, el problema esta cuando creas matrices que no tienen mismo numero de filas y columnas.

Esto se debe a que estas intentando hacer lo siguiente al hacer al copia de la matriz

Código Java:
Ver original
  1. destino[fil][col]=mxn[col][fil];

Si la matriz de origen mxn es de 3x4, estas definiendo la matriz destino como 4x3
entonces llegará un momento, en que intentes hacer

siendo fil = 0 col = 4

destino[0][4]= mxn[4][0]

Y aqui se te lanza el error ya que intentas acceder a una posicion que no existe ni en destino ni en mxn.

Solución cambiar esa linea y dejarlo así el método:

Código Java:
Ver original
  1. public static int[][] invertMatriz(int [][]mxn, int n, int m){
  2.        
  3.         int[][] destino = new int[m][n];
  4.        
  5.         for(int fil=0;fil<n;fil++){
  6.             for(int col=0;col<m;col++){                
  7.                 destino[col][fil]=mxn[fil][col];
  8.         }
  9.         }
  10.         return destino;        
  11.    
  12.         }

Un saludo!
  #5 (permalink)  
Antiguo 16/12/2013, 06:36
 
Fecha de Ingreso: diciembre-2013
Mensajes: 36
Antigüedad: 10 años, 5 meses
Puntos: 1
Respuesta: Invertir una matriz

Cuando llegue a casa lo pruebo. ;) Muchas gracias. (Te estas convirtiendo en mi mejor mentor, jajaja)

Etiquetas: invertir, matriz
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:57.