GFG App
Open App
Browser
Continue

# Java Program to multiply two matrices

Given two matrices, the task to multiply them. Matrices can either be square or rectangular.

Examples:Â

```Input : mat1[][] = {{1, 2},
{3, 4}}
mat2[][] = {{1, 1},
{1, 1}}
Output : {{3, 3},
{7, 7}}
Input : mat1[][] = {{2, 4},
{3, 4}}
mat2[][] = {{1, 2},
{1, 3}}
Output : {{6, 16},
{7, 18}}```

Multiplication of Square Matrices :Â
The below program multiplies two square matrices of size 4*4, we can change N for different dimensions.Â

## Java

 `// Java program to multiply two square ` `// matrices. ` `import` `java.io.*; ` ` `  `class` `GFG { ` ` `  `    ``static` `int` `N = ``4``; ` ` `  `    ``// This function multiplies mat1[][] ` `    ``// and mat2[][], and stores the result ` `    ``// in res[][] ` `    ``static` `void` `multiply(``int` `mat1[][], ` `                         ``int` `mat2[][], ``int` `res[][]) ` `    ``{ ` `        ``int` `i, j, k; ` `        ``for` `(i = ``0``; i < N; i++) { ` `            ``for` `(j = ``0``; j < N; j++) { ` `                ``res[i][j] = ``0``; ` `                ``for` `(k = ``0``; k < N; k++) ` `                    ``res[i][j] += mat1[i][k] ` `                                 ``* mat2[k][j]; ` `            ``} ` `        ``} ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``int` `mat1[][] = { { ``1``, ``1``, ``1``, ``1` `}, ` `                         ``{ ``2``, ``2``, ``2``, ``2` `}, ` `                         ``{ ``3``, ``3``, ``3``, ``3` `}, ` `                         ``{ ``4``, ``4``, ``4``, ``4` `} }; ` ` `  `        ``int` `mat2[][] = { { ``1``, ``1``, ``1``, ``1` `}, ` `                         ``{ ``2``, ``2``, ``2``, ``2` `}, ` `                         ``{ ``3``, ``3``, ``3``, ``3` `}, ` `                         ``{ ``4``, ``4``, ``4``, ``4` `} }; ` ` `  `        ``// To store result ` `        ``int` `res[][] = ``new` `int``[N][N]; ` `        ``int` `i, j; ` `        ``multiply(mat1, mat2, res); ` ` `  `        ``System.out.println(``"Result matrix"` `                           ``+ ``" is "``); ` `        ``for` `(i = ``0``; i < N; i++) { ` `            ``for` `(j = ``0``; j < N; j++) ` `                ``System.out.print(res[i][j] ` `                                 ``+ ``" "``); ` `            ``System.out.println(); ` `        ``} ` `    ``} ` `} ` ` `  `// This code is contributed by anuj_67. `

Output

```Result matrix is
10 10 10 10
20 20 20 20
30 30 30 30
40 40 40 40```

Time complexity: O(n3). It can be optimized using Strassenâ€™s Matrix Multiplication

Auxiliary Space: O(n2)

Multiplication of Rectangular Matrices :Â
We use pointers in C to multiply to matrices. Please refer to the following post as a prerequisite of the code.
How to pass a 2D array as a parameter in C?Â

## Java

 `// Java program to multiply two matrices. ` ` `  `public` `class` `GFG  ` `{ ` ` `  `    ``/** ` `     ``* to find out matrix multiplication ` `     ``* ` `     ``* @param matrix1 First matrix ` `     ``* @param rows1   Number of rows in matrix 1 ` `     ``* @param cols1   Number of columns in matrix 1 ` `     ``* @param matrix2 Second matrix ` `     ``* @param rows2   Number of rows in matrix 2 ` `     ``* @param cols2   Number of columns in matrix 2 ` `     ``* @return the result matrix (matrix 1 and matrix 2 ` `     ``* multiplication) ` `     ``*/` `    ``public` `static` `int``[][] matrixMultiplication( ` `        ``int``[][] matrix1, ``int` `rows1, ``int` `cols1, ` `        ``int``[][] matrix2, ``int` `rows2, ``int` `cols2) ` `        ``throws` `Exception ` `    ``{ ` ` `  `        ``// Required condition for matrix multiplication ` `        ``if` `(cols1 != rows2) { ` `            ``throw` `new` `Exception(``"Invalid matrix given."``); ` `        ``} ` ` `  `        ``// create a result matrix ` `        ``int` `resultMatrix[][] = ``new` `int``[rows1][cols2]; ` ` `  `        ``// Core logic for 2 matrices multiplication ` `        ``for` `(``int` `i = ``0``; i < resultMatrix.length; i++)  ` `        ``{ ` `            ``for` `(``int` `j = ``0``;  ` `                 ``j < resultMatrix[i].length; ` `                 ``j++)  ` `            ``{ ` `                ``for` `(``int` `k = ``0``; k < cols1; k++)  ` `                ``{ ` `                    ``resultMatrix[i][j] ` `                        ``+= matrix1[i][k] * matrix2[k][j]; ` `                ``} ` `            ``} ` `        ``} ` `        ``return` `resultMatrix; ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String[] args) ``throws` `Exception ` `    ``{ ` ` `  `        ``// Initial matrix 1 and matrix 2 ` `        ``int` `matrix1[][] = { { ``2``, ``4` `}, { ``3``, ``4` `} }; ` `        ``int` `matrix2[][] = { { ``1``, ``2` `}, { ``1``, ``3` `} }; ` ` `  `        ``// Function call to get a matrix multiplication ` `        ``int` `resultMatrix[][] = matrixMultiplication( ` `            ``matrix1, ``2``, ``2``, matrix2, ``2``, ``2``); ` ` `  `        ``// Display result matrix ` `        ``System.out.println(``"Result Matrix is:"``); ` `        ``for` `(``int` `i = ``0``; i < resultMatrix.length; i++)  ` `        ``{ ` `            ``for` `(``int` `j = ``0``;  ` `                 ``j < resultMatrix[i].length; ` `                 ``j++) ` `            ``{ ` `                ``System.out.print(resultMatrix[i][j] + ``"    "``); ` `            ``} ` `            ``System.out.println(); ` `        ``} ` `    ``} ` `    ``// This code is contributed by darshatandel1998 (Darshan ` `    ``// Tandel) ` `}`

Output

```6 16
7 18```

Time complexity: O(n3). It can be optimized using Strassenâ€™s Matrix Multiplication

Auxiliary Space: O(m1 * n2)

Please refer complete article on Program to multiply two matrices for more details!

My Personal Notes arrow_drop_up