Perform Matrix Addition in Java

Beginner
⏱️ 11 min read
📚 Updated: Aug 2026
🎯 3 Code Examples
🚀 Live Preview
2D arrays

What You’ll Learn

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.

Definition

Entrywise

Each output cell is the sum of matching input cells.

Same Shape

m × n both

Addition is defined only when dimensions match.

Nested Loops

Rows × cols

Outer loop rows, inner loop columns, visit each cell once.

3×3 Sample

All 10s

Classic demo: complementary matrices sum to 10.

Live Preview

Show sum

Run the 3×3 sample matrices in the browser.

O(m·n)

Per add

Visit each of the m·n cells exactly once.

Introduction

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.

Why it matters?

It is the cleanest 2D indexing warm-up — and the foundation before subtraction, multiplication, and transpose problems.

Key Highlights

Same Positions

Top-left adds to top-left — never mix cells.

Shape First

Validate rows and columns before looping.

2D Arrays

Access cells with matrix[i][j].

Commutative

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].

📝 Problem & Approach

Given two equal-sized matrices A and B, build C where each cell is the sum of corresponding cells.

java
// [[1, 2], [3, 4]] + [[4, 3], [2, 1]] = [[5, 5], [5, 5]]
// Same shape required; different shape → not defined

Inputs & Outputs

ItemTypeDescription
A, Bint[][]Two matrices with the same shape.
Return / printmatrix / textResult matrix C with entrywise sums.

Minimal workflow

Pseudocode
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 comparison

MethodIdeaNotes
Nested loopsC[i][j] = A[i][j] + B[i][j]Interview default — clear indexing
Fixed-size loopsHard-code 2 or 3Handy for whiteboard dry-runs
Shape-safe helperValidate then allocateReturn null (or throw) on mismatch

⚡ Quick Reference

GoalPattern
Rowsrows = mat.length
Columnscols = mat[0].length
Add cellresult[i][j] = a[i][j] + b[i][j]
Traversefor (int i = 0; i < rows; i++) for (int j = 0; j < cols; j++)
Print rowSystem.out.print(x + " ") per cell
Shape checkSame .length for rows and each row length

📋 Nested Loops vs Fixed Size vs Shape-Safe

Same entrywise rule — pick the form that fits the interview.

Nested loops
i, j indexing

Clearest story for whiteboards

Fixed size
for i < 2

Handy for 2×2 dry-runs

Shape-safe
null on mismatch

Validate before allocating

Interview tip
shape first

State the dimension rule before coding

Context

When This Problem Shows Up

Reach for matrix addition when 2D indexing and entrywise work matter.

  1. Interview warm-ups

    Nested loops plus list-of-lists indexing.

  2. Linear algebra basics

    First matrix operation before multiply / transpose.

  3. Image / grid tasks

    Same pattern as combining equal-sized grids.

  4. After magic numbers

    Shift from digit loops to 2D structures.

  5. Not for multiply

    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.

🔮 Live Preview

Uses the same 3×3 sample matrices as Example 1. Click to display Matrix 1, Matrix 2, and the result.

Matches the sample matrices in code example 1.

Live result
Press “Show 3x3 sum”.

Examples Gallery

Three complete Java programs — 3×3 helpers, compact 2×2, and a dimension-safe adder. Click View Output to reveal sample console results.

📚 Getting Started

Reusable add and display helpers for a 3×3 pair.

Example 1 — Add Two 3×3 Matrices

Helper functions for addition and display — beginner-friendly and interview-friendly.

java
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);
    }
}

How It Works

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.

⚡ Compact Size

Same logic on a smaller 2×2 dry-run.

Example 2 — Add Two 2×2 Matrices

Fixed-size loops — great for quick whiteboard checks.

java
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);
    }
}

How It Works

Even with fixed size 2×2, the pattern is identical: loop over rows and columns and add matching entries.

⚙️ Shape Validation

Reject mismatched or ragged matrices before adding.

Example 3 — Dimension-Safe Adder

Checks empty input, row counts, and uniform column lengths, then adds.

java
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));
    }
}

How It Works

Shape checks catch mismatched dimensions and ragged rows before any addition. Returning null (or throwing) is clearer than silent index errors.

🧠 How the Algorithm Builds C

1

Check dimensions

If row or column counts differ, stop.

Shape
2

Nested traverse

For each i, j set C[i][j] = A[i][j] + B[i][j].

Loops
3

Display result

Print each row on its own line.

Output
=

Sum matrix ready

C has the same shape as A and B.

🔎 Worked Walkthrough — 2×2

Trace each cell for [[1, 2], [3, 4]] + [[4, 3], [2, 1]].

(i, j)ABC
(0, 0)145
(0, 1)235
(1, 0)325
(1, 1)415

Result: [[5, 5], [5, 5]].

Use Cases

Where matrix addition shows up beyond the interview prompt.

1. Interview Warm-Ups

2D indexing with a one-line cell formula.

Example: write add_matrices(A, B).

2. Teaching Nested Loops

Outer row / inner column with a visual result.

Example: 3×3 all-10s demo.

3. Grid / Image Layers

Combine equal-sized 2D arrays entrywise.

Example: add two intensity maps.

4. Precursor to Multiply

Master shape rules before harder matrix ops.

Example: next up: division / multiply.

5. Validation Habits

Practice rejecting ragged or mismatched shapes.

Example: Example 3 above.

6. Complexity Stories

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.

Advantages

Why this pattern works well in interviews and classwork.

  1. 1. Simple Formula

    One cell rule: C[i][j] = A[i][j] + B[i][j].

  2. 2. Predictable Cost

    Exactly m·n additions for an m×n pair.

  3. 3. Easy to Dry-Run

    2×2 examples fit on a whiteboard in seconds.

  4. 4. Builds Later Topics

    Same traversal pattern for subtraction and more.

Pro Tip: lead with nested loops; mention a shape-safe helper if asked about robustness.

Usage Tips

Small habits that keep matrix-addition solutions interview-ready.

  1. 1. State Shape First

    Say “same m×n required” before coding loops.

  2. 2. Build Rows Fresh

    Append a new row list each outer iteration — avoid shared references.

  3. 3. Dry-Run a 2×2

    Four cells catch off-by-one bugs fast.

  4. 4. Print Row by Row

    Keep matrix layout readable in console demos.

  5. 5. Mention O(m·n)

    Interviewers often ask complexity right after the code.

Pro Tip: allocate with new int[rows][cols] (not one shared row array reused by accident).

Common Pitfalls

Mistakes that commonly break matrix-addition solutions.

  1. 1. Ignoring Shape Mismatch

    Adding matrices with different sizes.

    → Validate rows and columns first.

  2. 2. Shared Row References

    Reusing one int[] row reference for every row corrupts updates.

    → Prefer new int[rows][cols] so each row is a fresh array.

  3. 3. Ragged Rows

    One row shorter than others causes index errors.

    → Check every row length equals cols.

  4. 4. Swapping i and j

    Wrong index order corrupts rectangular matrices.

    → Keep i = row, j = column consistently.

  5. 5. Confusing With Multiplication

    Using row·column products for addition.

    → Addition is entrywise only.

Edge Cases

Most matrix-addition bugs come from shape assumptions and indexing mistakes.

Shape

Mismatched dimensions

Never add matrices with different row or column counts.

Input

Ragged rows

Validate each row length before indexing.

Index

Wrong loop bounds

Bad ranges skip cells or raise IndexError.

Empty

Empty matrices

Decide whether [] + [] is allowed; guard empty rows.

1×1

Single cell

Still uses the same formula — one addition.

Negatives

Signed entries

Addition works the same for negative integers.

⚖️ Facts Worth Knowing

Handy follow-ups interviewers sometimes ask.

  • Entrywise. (A+B)ij = Aij + Bij.
  • Commutative. A + B = B + A for equal-sized matrices.
  • Associative. (A + B) + C = A + (B + C) when shapes match.
  • Not multiply. Multiplication has different dimensions and a different formula.

🎯 Practice Problems

Try these variations to lock in the pattern.

1. Dry-run 2×2

  • Reproduce Example 2 by hand
  • Expect all 5s

2. Shape rejection

  • 2×2 + 2×3 → error / null
  • Assert your guard works

3. Fixed-size rewrite

  • Rewrite add with a fixed 2×2 size
  • Keep the same O(m·n) behavior

4. Subtract next

  • Change + to - with the same loops
  • Warm-up for matrix division page

Notes

  • Definition: C[i][j] = A[i][j] + B[i][j] only when dimensions match.
  • Code pattern: nested loops over rows and columns, plus optional print helper.
  • Complexity: linear in number of cells, m*n.
  • Watch ragged rows and shared-list initialization bugs.

Quick Takeaway: same shape required; add matching cells with nested loops in O(m·n).

⏱️ Time and Space Complexity

OperationTimeExtra space
Add two m × n matricesO(m*n)O(1) besides the output matrix
Print an m × n matrixO(m*n)O(1)
Shape validationO(m) row checksO(1)
Wrap Up

🎉 Conclusion

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.

💡 Best Practices

✅ Do

  • State the shape rule before coding
  • Use nested loops with clear i, j meaning
  • Build each result row as a fresh list
  • Dry-run a 2×2 example
  • Quote O(m*n) complexity

❌ Don’t

  • Add mismatched shapes
  • Reuse one row array for every row
  • Ignore ragged rows
  • Swap row/column indices
  • Confuse addition with multiplication

Key Takeaways

Knowledge Unlocked

Five things to remember about matrix addition

Add matrices the interview-friendly way.

5
Core concepts
= 02

Shape

Same m × n

Constraint
03

Loops

Rows then cols

Code
[] 04

Store

int[][]

Java
O 05

Cost

O(m·n)

Analysis

❓ Frequently Asked Questions

They must have exactly the same dimensions: same row count and same column count. Then each output cell is the sum of matching cells.
For interview-level problems, a matrix is usually a 2D array, such as int[][] m = {{1, 2}, {3, 4}}. Each inner array is one row.
Yes. For equal-sized matrices, A + B = B + A because each pair of matching entries is added.
For an m x n matrix, we visit each entry once, so time complexity is O(m*n). Extra space is O(1) besides the output matrix.
Yes for int/long. int addition wraps on overflow; use long (or BigInteger) when sums may exceed Integer.MAX_VALUE.
Because matrices are 2D. The outer loop walks rows and the inner loop walks columns, so every position (i, j) is processed exactly once.
No. Addition is entrywise. Multiplication mixes rows and columns with a different formula and shape rules.
Libraries can hide the loops. Interviews usually want nested for-loops first so you show indexing clearly.

Did you Know? 🔊

Matrix addition is entrywise: (A+B)ij = Aij + Bij. It is valid only when both matrices have the same number of rows and columns.

Continue to Matrix Division

Learn how to divide two matrices entrywise with the same nested-loop pattern.

Matrix division tutorial →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

8 people found this page helpful