Ayuda con matriz mxn

Iniciado por Neo102, 23 Febrero 2013, 12:14 PM

0 Miembros y 1 Visitante están viendo este tema.

Neo102

Buenas,
Venía en busca de nuevo de vuestros sabios consejos para los que nos iniciamos en este mundillo. En este caso es acerca de un problemilla de multiplicacion de matrices mxn, de cualquier tamaño, en la web hay algo de informacion, la he revisado, pero el caso es que no me acaba de sacar por pantalla el resultado de la multiplicación. Debe ser una chorrada, pero llevo bastante tiempo probando soluciones, y no soy capaz de dar con ella, y estoy empezando a perder la esperanza. He definido las instrucciones , pero a la hora de llamar a la clase, compila todo el programa, pero sin calcular esta operacion (sin mostrar el resultado, lo demás sí que lo hace correctamente).

He creado 3 clases diferentes, que son principal, Matriz y Multiplicacion.java. Es un poco largo, pero ahí van :

import java.io.*;
import java.util.*;

public class Principal {
   
   public static void main(String[] args) throws IOException {
      
   BufferedReader in= Text.open(System.in);
   System.out.print("\r");   
   Matriz A,B;   
   Multiplicacion m;
   int f,c;


   System.out.println("Introduzca la primera Matriz:\n");
   System.out.print(" Número de Filas (matriz A): ");
   f=Text.readInt(in);
   System.out.print(" Número de Columnas (matriz A): ");
   c=Text.readInt(in);
   A=new Matriz(f,c);

   System.out.print("Introducir Elementos: ");// introducimos datos
   System.out.println("Matriz A:("+A.filas+"x"+A.columnas+")");
   for(int i=0;i<A.filas;i++){
   for(int j=0;j<A.columnas;j++){
   System.out.print(" Elemento"+"["+i+"]"+"["+j+"] ?:");
   A.Llenar(Text.readInt(in),i,j);
      }   
   } System.out.println();

   System.out.println("Introduzca la segunda Matriz: ");      
   System.out.print(" Número de Filas (matriz B): ");
   f=Text.readInt(in);
   System.out.print(" Número de Columnas (matriz B): ");
   c=Text.readInt(in);
   B=new Matriz(f,c);


   System.out.println("Matriz B:("+B.filas+"x"+B.columnas+")");
   for(int i=0;i<B.filas;i++){
   for(int j=0;j<B.columnas;j++){
   System.out.print(" Elemento"+"["+i+"]"+"["+j+"] ?:");
   B.Llenar(Text.readInt(in),i,j);
      }
   }
   System.out.println();

   if (A.columnas == B.filas) {
      System.out.println("Matriz A");
   A.Mostrar();//Se muestran las dos matrices creadas, antes
   System.out.println();
   System.out.println("Matriz B");
   B.Mostrar(); // de mostrar el resultado de la multiplicación
   m=new Multiplicacion();
   Matriz resultado = m.producto();
   resultado.mostrar();
   }
   
else {
   System.out.println("<<<error>>>;: No pudo realizarse el producto.");
      }
   }
}

public class Matriz{
   
   public int[][] matriz;
   public int filas,columnas;
   
   public Matriz(){
      filas=1;
      columnas=1;
   }

   public Matriz(int f,int c){
      filas=f;
      columnas=c;
      matriz=new int[filas][columnas];
   }

   public void Llenar(int valor,int i,int j){ // Introduce un valor en la matriz en la posicion i,j
      matriz[j]=valor;
   }

   public int[] getFila(int k){ // Muestra los datos de k(fila)
   int[] row=new int[matriz[k].length];
   for(int i=0;i<row.length;i++){
      row=matriz[k];
   }
   return row;
   }
   
   public int[] getColumna(int k){ // Muestra los datos de k(columna)
   int[] column=new int[matriz.length];
   for(int i=0;i<column.length;i++){
      column=matriz[k];
   }
   return column;
   }
   
   public void Mostrar(){ // Muestra los elementos .

   for(int i=0;i<filas;i++){
      for(int j=0;j<columnas;j++){
         System.out.print(matriz[j]+" ");
      }
   System.out.println();
      }
  }
}


import java.io.*;
import java.util.*;


public class Multiplicacion {
   
public Matriz A,B;

   /**
    * Multiplica dos matrices
    * @param int[][] A
    * @param int[][] B
    * @return int[][] producto
    */
   private int[][] producto(int A[][], int B[][]){
      int suma = 0;
      int result[][] = new int[A.length][B.length];
      for(int i = 0; i < A.length; i++){
         for(int j = 0; j < B.length; j++){
            suma = 0;
            for(int k = 0; k < B.length; k++){
               suma += A[k] * B[k][j];
            }
            result[j] = suma;
         }
      }
      return result;
   }
}




Mitsu

Hola, En realidad no entiendo muy bien lo que deseas hacer, deseas multiplicar las matrices por sus índices? Yo lo entendí así e hice un code muy sencillo:

Código (=java) [Seleccionar]
import java.util.Scanner;

public class multiplicarMatriz {

private Scanner t = new Scanner(System.in);
    private int matrizUno[][];
    private int matrizDos[][];

public void setMatriz()
{
System.out.println("Cuantas filas desea que tengan las matrices?");
int filas = t.nextInt();
System.out.println("Cuantas columnas?");
int columnas = t.nextInt();

matrizUno = new int [filas][columnas];
matrizDos = new int [filas][columnas];
}

// metodo para llenar una matriz
public void llenarMatriz()
{
for(int i=0; i<matrizUno.length; i++)
{
for(int j=0; j<matrizUno[i].length; j++)
{
System.out.println("Ingrese el elemento "+(j+1)+" de la fila "+i+": ");
System.out.println("Matriz 1: ");
matrizUno[i][j] = t.nextInt();
System.out.println("Matriz 2: ");
matrizDos[i][j] = t.nextInt();
}
}
} // fin metodo

// metodo para mostrar los productos de 2 matrices
public void mostrarProducto()
{
for(int i=0; i<matrizUno.length; i++)
{
for(int j=0; j<matrizUno[i].length; j++)
{
System.out.println("Producto de los elementos Nro "+(j+1)+" de las matrices: "+(matrizUno[i][j]*matrizDos[i][j]));
}
}
} // fin metodo

} // el fin?


Main:

Código (=java) [Seleccionar]
public class pruebaMatriz {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

multiplicarMatriz prueba = new multiplicarMatriz();
prueba.setMatriz();
prueba.llenarMatriz();
prueba.mostrarProducto();

       
}

}



Lo que sale por consola:

Código (=java) [Seleccionar]
Cuantas filas desea que tengan las matrices?
2
Cuantas columnas?
2
Ingrese el elemento 1 de la fila 0:
Matriz 1:
2
Matriz 2:
4
Ingrese el elemento 2 de la fila 0:
Matriz 1:
3
Matriz 2:
5
Ingrese el elemento 1 de la fila 1:
Matriz 1:
1
Matriz 2:
6
Ingrese el elemento 2 de la fila 1:
Matriz 1:
9
Matriz 2:
7
Producto de los elementos Nro 1 de las matrices: 8
Producto de los elementos Nro 2 de las matrices: 15
Producto de los elementos Nro 1 de las matrices: 6
Producto de los elementos Nro 2 de las matrices: 63



No sé si lo que quieres es esto.



Saludos.

Neo102

Gracias, si, lo que buscaba era algo similar a ese resultado, lo único, añadirle para que muestre en pantalla las matrices, tanto las dos iniciales, como la resultante de la multiplicación.
Al final, lo he solucionado a base intentos y más intentos,  :-*