diff --git a/src/main/java/util/Matrix.java b/src/main/java/util/Matrix.java
index 3e4cb8ef145206f559d354d392462c30c109416c..38c61097e6aa2fffa56695edf2c0f62b6da1fde5 100644
--- a/src/main/java/util/Matrix.java
+++ b/src/main/java/util/Matrix.java
@@ -6,27 +6,90 @@ import java.util.NoSuchElementException;
 
 public class Matrix<E> implements Iterable<E> {
     private ArrayList<ArrayList<E>> matrix;
+    private final int rows;
+    private final int columns;
 
-    public Matrix() {
-        this.matrix = new ArrayList<ArrayList<E>>();
+    public Matrix(int rows, int columns) {
+        this.rows = rows;
+        this.columns = columns;
+        this.matrix = new ArrayList<>(rows);
+        
+        // Initialiser chaque ligne de la matrice
+        for (int i = 0; i < rows; i++) {
+            ArrayList<E> row = new ArrayList<>(columns);
+            // Initialiser chaque colonne avec des valeurs nulles
+            for (int j = 0; j < columns; j++) {
+                row.add(null);
+            }
+            this.matrix.add(row);
+        }
     }
 
     public E get(int x, int y) {
+        validateIndexes(x, y);
         return matrix.get(x).get(y);
     }
 
     public E set(int x, int y, E object) {
+        validateIndexes(x, y);
         return matrix.get(x).set(y, object);
     }
 
     public void clear() {
-        this.matrix = new ArrayList<ArrayList<E>>();
+        this.matrix.clear();
+        for (int i = 0; i < rows; i++) {
+            ArrayList<E> row = new ArrayList<>(columns);
+            for (int j = 0; j < columns; j++) {
+                row.add(null);
+            }
+            this.matrix.add(row);
+        }
     }
 
     public int size() {
-        return matrix != null ? matrix.get(0).size() * matrix.size() : 0;
+        return rows * columns;
     }
 
+    public int getColumns(){
+        return this.columns;
+    }
+    public int getRows(){
+        return this.rows;
+    }
+    public void displayMatrix() {
+        System.out.print("  ");
+        for (int j = 0; j < columns; j++) {
+            System.out.print("___ ");
+        }
+        System.out.println();
+
+        for (int i = 0; i < rows; i++) {
+            System.out.print("| ");
+            for (int j = 0; j < columns; j++) {
+                if (matrix.get(i).get(j) != null) {
+                    System.out.print(" x | ");
+                } else {
+                    System.out.print("   | ");
+                }
+            }
+            System.out.println();
+            System.out.print("  ");
+            for (int j = 0; j < columns; j++) {
+                System.out.print("___ ");
+            }
+            System.out.println();
+        }
+    }
+
+    private void validateIndexes(int x, int y) {
+        if (x < 0 || x >= rows || y < 0 || y >= columns) {
+            throw new IndexOutOfBoundsException("Indices x: "+ x + " y: " + y + " hors limites pour la matrice.");
+        }
+    }
+    
+
+    
+
     @Override
     public Iterator<E> iterator() {
         return new MatrixIterator();
@@ -38,7 +101,7 @@ public class Matrix<E> implements Iterable<E> {
 
         @Override
         public boolean hasNext() {
-            return row < matrix.size() && col < matrix.get(row).size();
+            return row < rows && col < columns;
         }
 
         @Override
@@ -48,7 +111,7 @@ public class Matrix<E> implements Iterable<E> {
             }
             E element = matrix.get(row).get(col);
             col++;
-            if (col >= matrix.get(row).size()) {
+            if (col >= columns) {
                 col = 0;
                 row++;
             }