Definition
Entrywise
Each output cell is the sum of matching input cells.
Matrix addition combines matching cells: C[i][j] = A[i][j] + B[i][j], only when shapes match. This tutorial covers the rule, nested loops over int[][], a live preview, worked Java examples, edge cases, and complexity.
Entrywise
Each output cell is the sum of matching input cells.
m × n both
Addition is defined only when dimensions match.
Rows × cols
Outer loop rows, inner loop columns, visit each cell once.
All 10s
Classic demo: complementary matrices sum to 10.
Show sum
Run the 3×3 sample matrices in the browser.
Per add
Visit each of the m·n cells exactly once.
Matrix addition is entrywise: if A and B are both m × n, then C = A + B is also m × n with C[i][j] = A[i][j] + B[i][j].
In Java interviews, matrices are usually int[][] (row-major 2D arrays). Nested loops walk every position once; if shapes differ, addition is not defined.
It is the cleanest 2D indexing warm-up — and the foundation before subtraction, multiplication, and transpose problems.
Top-left adds to top-left — never mix cells.
Validate rows and columns before looping.
Access cells with matrix[i][j].
A + B = B + A for equal-sized matrices.
In short: if shapes match, walk every cell with nested loops and set C[i][j] = A[i][j] + B[i][j].
Given two equal-sized matrices A and B, build C where each cell is the sum of corresponding cells.
// [[1, 2], [3, 4]] + [[4, 3], [2, 1]] = [[5, 5], [5, 5]]
// Same shape required; different shape → not defined | Item | Type | Description |
|---|---|---|
A, B | int[][] | Two matrices with the same shape. |
| Return / print | matrix / text | Result matrix C with entrywise sums. |
function add_matrices(A, B, rows, cols):
create matrix C of shape rows x cols
for i from 0 to rows - 1:
for j from 0 to cols - 1:
C[i][j] <- A[i][j] + B[i][j]
return C | Method | Idea | Notes |
|---|---|---|
| Nested loops | C[i][j] = A[i][j] + B[i][j] | Interview default — clear indexing |
| Fixed-size loops | Hard-code 2 or 3 | Handy for whiteboard dry-runs |
| Shape-safe helper | Validate then allocate | Return null (or throw) on mismatch |
| Goal | Pattern |
|---|---|
| Rows | rows = mat.length |
| Columns | cols = mat[0].length |
| Add cell | result[i][j] = a[i][j] + b[i][j] |
| Traverse | for (int i = 0; i < rows; i++) for (int j = 0; j < cols; j++) |
| Print row | System.out.print(x + " ") per cell |
| Shape check | Same .length for rows and each row length |
Same entrywise rule — pick the form that fits the interview.
i, j indexingClearest story for whiteboards
for i < 2Handy for 2×2 dry-runs
null on mismatchValidate before allocating
shape firstState the dimension rule before coding
Reach for matrix addition when 2D indexing and entrywise work matter.
Nested loops plus list-of-lists indexing.
First matrix operation before multiply / transpose.
Same pattern as combining equal-sized grids.
Shift from digit loops to 2D structures.
Different shape rules — do not confuse the two.
Key benefit: one short 2D problem that locks in indexing, shape validation, and O(m·n) thinking.
Uses the same 3×3 sample matrices as Example 1. Click to display Matrix 1, Matrix 2, and the result.
Three complete Java programs — 3×3 helpers, compact 2×2, and a dimension-safe adder. Click View Output to reveal sample console results.
Reusable add and display helpers for a 3×3 pair.
Helper functions for addition and display — beginner-friendly and interview-friendly.
public class MatrixAdd3x3 {
static int[][] addMatrices(int[][] mat1, int[][] mat2) {
int rows = mat1.length;
int cols = mat1[0].length;
int[][] result = new int[rows][cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result[i][j] = mat1[i][j] + mat2[i][j];
}
}
return result;
}
static void displayMatrix(String title, int[][] matrix) {
System.out.println(title);
for (int[] row : matrix) {
for (int x : row) {
System.out.print(x + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
int[][] matrix1 = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 },
};
int[][] matrix2 = {
{ 9, 8, 7 },
{ 6, 5, 4 },
{ 3, 2, 1 },
};
int[][] resultMatrix = addMatrices(matrix1, matrix2);
displayMatrix("Matrix 1:", matrix1);
System.out.println();
displayMatrix("Matrix 2:", matrix2);
System.out.println();
displayMatrix("Resultant Matrix:", resultMatrix);
}
} The key line is mat1[i][j] + mat2[i][j]. Nested loops visit every matching position once; the print helper formats each row for the console.
Same logic on a smaller 2×2 dry-run.
Fixed-size loops — great for quick whiteboard checks.
public class MatrixAdd2x2 {
static int[][] addMatrices2x2(int[][] a, int[][] b) {
int[][] result = new int[2][2];
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
result[i][j] = a[i][j] + b[i][j];
}
}
return result;
}
static void printMatrix(String title, int[][] m) {
System.out.println(title);
for (int[] row : m) {
for (int x : row) {
System.out.print(x + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
int[][] a = {
{ 1, 2 },
{ 3, 4 },
};
int[][] b = {
{ 4, 3 },
{ 2, 1 },
};
int[][] c = addMatrices2x2(a, b);
printMatrix("A", a);
System.out.println();
printMatrix("B", b);
System.out.println();
printMatrix("A + B", c);
}
} Even with fixed size 2×2, the pattern is identical: loop over rows and columns and add matching entries.
Reject mismatched or ragged matrices before adding.
Checks empty input, row counts, and uniform column lengths, then adds.
import java.util.Arrays;
public class MatrixAddSafe {
static boolean sameShape(int[][] a, int[][] b) {
if (a == null || b == null || a.length == 0 || b.length == 0) {
return false;
}
if (a.length != b.length) {
return false;
}
int cols = a[0].length;
if (cols == 0) {
return false;
}
for (int[] row : a) {
if (row.length != cols) {
return false;
}
}
for (int[] row : b) {
if (row.length != cols) {
return false;
}
}
return true;
}
static int[][] addMatricesSafe(int[][] a, int[][] b) {
if (!sameShape(a, b)) {
return null;
}
int rows = a.length;
int cols = a[0].length;
int[][] result = new int[rows][cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result[i][j] = a[i][j] + b[i][j];
}
}
return result;
}
public static void main(String[] args) {
int[][] ok = addMatricesSafe(
new int[][] { { 1, 2 }, { 3, 4 } },
new int[][] { { 4, 3 }, { 2, 1 } }
);
int[][] bad = addMatricesSafe(
new int[][] { { 1, 2 } },
new int[][] { { 1, 2 }, { 3, 4 } }
);
System.out.println(Arrays.deepToString(ok));
System.out.println(Arrays.deepToString(bad));
}
} Shape checks catch mismatched dimensions and ragged rows before any addition. Returning null (or throwing) is clearer than silent index errors.
If row or column counts differ, stop.
For each i, j set C[i][j] = A[i][j] + B[i][j].
Print each row on its own line.
C has the same shape as A and B.
Trace each cell for [[1, 2], [3, 4]] + [[4, 3], [2, 1]].
| (i, j) | A | B | C |
|---|---|---|---|
(0, 0) | 1 | 4 | 5 |
(0, 1) | 2 | 3 | 5 |
(1, 0) | 3 | 2 | 5 |
(1, 1) | 4 | 1 | 5 |
Result: [[5, 5], [5, 5]].
Where matrix addition shows up beyond the interview prompt.
2D indexing with a one-line cell formula.
Example: write add_matrices(A, B).
Outer row / inner column with a visual result.
Example: 3×3 all-10s demo.
Combine equal-sized 2D arrays entrywise.
Example: add two intensity maps.
Master shape rules before harder matrix ops.
Example: next up: division / multiply.
Practice rejecting ragged or mismatched shapes.
Example: Example 3 above.
State O(m·n) when asked about cost.
Example: one add per cell.
Pro Tip: say “same shape, entrywise sum” before writing a single loop.
Why this pattern works well in interviews and classwork.
One cell rule: C[i][j] = A[i][j] + B[i][j].
Exactly m·n additions for an m×n pair.
2×2 examples fit on a whiteboard in seconds.
Same traversal pattern for subtraction and more.
Pro Tip: lead with nested loops; mention a shape-safe helper if asked about robustness.
Small habits that keep matrix-addition solutions interview-ready.
Say “same m×n required” before coding loops.
Append a new row list each outer iteration — avoid shared references.
Four cells catch off-by-one bugs fast.
Keep matrix layout readable in console demos.
Interviewers often ask complexity right after the code.
Pro Tip: allocate with new int[rows][cols] (not one shared row array reused by accident).
Mistakes that commonly break matrix-addition solutions.
Adding matrices with different sizes.
→ Validate rows and columns first.
Reusing one int[] row reference for every row corrupts updates.
→ Prefer new int[rows][cols] so each row is a fresh array.
One row shorter than others causes index errors.
→ Check every row length equals cols.
Wrong index order corrupts rectangular matrices.
→ Keep i = row, j = column consistently.
Using row·column products for addition.
→ Addition is entrywise only.
Most matrix-addition bugs come from shape assumptions and indexing mistakes.
Never add matrices with different row or column counts.
Validate each row length before indexing.
Bad ranges skip cells or raise IndexError.
Decide whether [] + [] is allowed; guard empty rows.
Still uses the same formula — one addition.
Addition works the same for negative integers.
Handy follow-ups interviewers sometimes ask.
Try these variations to lock in the pattern.
C[i][j] = A[i][j] + B[i][j] only when dimensions match.m*n.Quick Takeaway: same shape required; add matching cells with nested loops in O(m·n).
| Operation | Time | Extra space |
|---|---|---|
Add two m × n matrices | O(m*n) | O(1) besides the output matrix |
Print an m × n matrix | O(m*n) | O(1) |
| Shape validation | O(m) row checks | O(1) |
Matrix addition is entrywise: matching cells add when shapes match. Use nested loops over list-of-lists, validate dimensions, and state O(m·n) complexity.
Practice the three examples above, then continue to matrix division for the next 2D operation.
Same shape first, then C[i][j] = A[i][j] + B[i][j] — never confuse this with multiplication.
Add matrices the interview-friendly way.
Entrywise sum
DefinitionSame m × n
ConstraintRows then cols
Codeint[][]
JavaO(m·n)
AnalysisMatrix addition is entrywise: (A+B)ij = Aij + Bij. It is valid only when both matrices have the same number of rows and columns.
Learn how to divide two matrices entrywise with the same nested-loop pattern.
8 people found this page helpful