public class Matriz2 { private double[][] matriz; public Matriz2() { } public Matriz2(int n, int m) { if ( n > 0 && m > 0 ) matriz = new double[n][m]; } public void leer() { int filas = Keyboard.getNextInt("n: ", 1); int columnas = Keyboard.getNextInt("m: ", 1); matriz = new double[filas][columnas]; for ( int i = 0; i < filas; ++i ) // Debe usarse matriz.length en lugar de filas for ( int j = 0; j < columnas; ++j ) // y matriz[i].length en lugar de columnas matriz[i][j] = Keyboard.getNextDouble("m(" + (i + 1) + "," + (j + 1) + "): "); } public int filas() { return matriz.length; } public int columnas() { return matriz[0].length; } public void imprimir() { for ( int i = 0; i < matriz.length; ++i ) { for ( int j = 0; j < matriz[i].length; ++j ) System.out.printf("%6.1f", matriz[i][j] ); System.out.println(); } } public void multiplicarFila(int fila, double factor) { for( int columna = 0; columna < matriz[fila].length; ++columna ) matriz[fila][columna] *= factor; } public boolean esNula() { for ( int i = 0; i < matriz.length; ++i ) for ( int j = 0; j < matriz[i].length; ++j ) if ( matriz[i][j] != 0.0 ) return false; return true; } public boolean esCuadrada() { return filas() == columnas(); } public void imprimirDiagonal() { if ( esCuadrada() ) { System.out.print("Diagonal primaria: "); for ( int i = 0; i < matriz.length; ++i ) System.out.printf("%.1f ", matriz[i][i]); System.out.println(); } } public double traza() { double resultado = 0.0; for ( int i = 0, n = Math.min(filas(), columnas()); i < n; ++i ) resultado += matriz[i][i]; return resultado; } public boolean esDiagonal() { if ( ! esCuadrada() ) return false; for ( int i = 0; i < matriz.length; ++i ) for ( int j = 0; j < matriz[i].length; ++j ) if ( ( i == j && matriz[i][j] == 0.0 ) || ( i != j && matriz[i][j] != 0.0 ) ) return false; return true; } public boolean esIdentidad() { if ( ! esCuadrada() ) return false; for ( int i = 0; i < matriz.length; ++i ) for ( int j = 0; j < matriz[i].length; ++j ) if ( ( i == j && matriz[i][j] != 1.0 ) || ( i != j && matriz[i][j] != 0.0 ) ) return false; return true; } public boolean esTriangularSuperior() { for ( int i = 0; i < matriz.length; ++i ) for ( int j = 0; j < matriz[i].length; ++j ) if ( i > j && matriz[i][j] != 0.0 ) return false; return true; } public boolean esTriangularInferior() { for ( int i = 0; i < matriz.length; ++i ) for ( int j = 0; j < matriz[i].length; ++j ) if ( j > i && matriz[i][j] != 0.0 ) return false; return true; } public Matriz2 traspuesta() { Matriz2 resultado = new Matriz2( columnas(), filas() ); for ( int i = 0; i < matriz.length; ++i ) for ( int j = 0; j < matriz[i].length; ++j ) resultado.matriz[j][i] = matriz[i][j]; return resultado; } public Matriz2 sumar(Matriz2 otra) { if ( filas() != otra.filas() || columnas() != otra.columnas() ) return null; Matriz2 resultado = new Matriz2( filas(), columnas() ); for ( int i = 0; i < matriz.length; ++i ) for ( int j = 0; j < matriz[i].length; ++j ) resultado.matriz[i][j] = matriz[i][j] + otra.matriz[i][j]; return resultado; } public void imprimirPropiedades() { System.out.print("\n("); if ( esCuadrada() ) System.out.print("Cuadrada. "); if ( esNula() ) System.out.print("Nula. "); if ( esDiagonal() ) System.out.print("Diagonal. "); if ( esIdentidad() ) System.out.print("Identidad. "); if ( esTriangularSuperior() ) System.out.print("Triangular superior. "); if ( esTriangularInferior() ) System.out.print("Triangular inferior. "); System.out.printf( "Traza: %.1f)\n", traza() ); } public static void main(String[] args) { Matriz2 m1 = new Matriz2(); System.out.println("Matriz A:"); m1.leer(); System.out.println(); m1.imprimir(); m1.imprimirPropiedades(); /* Matriz2 m1t = m1.traspuesta(); System.out.printf("Traspuesta de A:\n\n"); m1t.imprimir(); System.out.println(); */ Matriz2 m2 = new Matriz2(); System.out.println("\nMatriz B:"); m2.leer(); System.out.println(); m2.imprimir(); m2.imprimirPropiedades(); Matriz2 suma = m1.sumar(m2); if ( suma != null ) { System.out.printf("\nA + B =\n\n"); suma.imprimir(); System.out.println(); } else System.out.printf("\nA + B = (null)\n"); } }