From 6a93814eaca6a1df356e36bbd41a36c1852420b4 Mon Sep 17 00:00:00 2001
From: b22015696 <maxence.balme@etu.univ-amu.fr>
Date: Fri, 8 Nov 2024 16:51:12 +0100
Subject: [PATCH] =?UTF-8?q?avanc=C3=A9e?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../matrix/ConstantMatrixInitializer.java     |  8 +++---
 src/main/java/matrix/ListMatrix.java          | 27 ++++++++++++-------
 src/main/java/matrix/Matrix.java              |  2 +-
 .../java/matrix/SubMatrixInitializer.java     | 18 +++++++++++++
 4 files changed, 41 insertions(+), 14 deletions(-)
 create mode 100644 src/main/java/matrix/SubMatrixInitializer.java

diff --git a/src/main/java/matrix/ConstantMatrixInitializer.java b/src/main/java/matrix/ConstantMatrixInitializer.java
index 88d798b..86d2574 100644
--- a/src/main/java/matrix/ConstantMatrixInitializer.java
+++ b/src/main/java/matrix/ConstantMatrixInitializer.java
@@ -2,15 +2,15 @@ package matrix;
 
 public class ConstantMatrixInitializer<T> implements MatrixInitializer<T> {
 
-  // TODO: add instance variables
+  private T constant ;
 
   public ConstantMatrixInitializer(T constant) {
-    // TODO
+    this.constant = constant;
   }
 
     @Override
     public T initialValueAt(Coordinate coordinate) {
-      // TODO
-      return null;
+
+      return constant;
     }
 }
diff --git a/src/main/java/matrix/ListMatrix.java b/src/main/java/matrix/ListMatrix.java
index 418e05d..5074b6c 100644
--- a/src/main/java/matrix/ListMatrix.java
+++ b/src/main/java/matrix/ListMatrix.java
@@ -1,5 +1,6 @@
 package matrix;
 
+import java.util.ArrayList;
 import java.util.List;
 
 
@@ -23,10 +24,9 @@ public class ListMatrix<T> implements Matrix<T> {
    * @param initializer A matrix initializer to set values in the {@link ListMatrix}.
    */
   public ListMatrix(int width, int height, MatrixInitializer<T> initializer) {
-    // TODO
-    this.width = 0;
-    this.height = 0;
-    this.matrix = null;
+    this.width = width;
+    this.height = height;
+    this.matrix = new ArrayList<>(width);
     this.initializeWith(initializer); // fills the matrix using initializer
   }
 
@@ -35,8 +35,17 @@ public class ListMatrix<T> implements Matrix<T> {
   }
 
   private void initializeWith(MatrixInitializer<T> initializer) {
-    // TODO initialize each cell of the matrix, with a value determined by initializer
-  }
+    for (int x=0; x<width; x++) {
+      List<T> column = new ArrayList<>(height);
+
+      for (int y = 0; y < height; y++) {
+        column.add(initializer.initialValueAt(new Coordinate(x, y)));
+      }
+      matrix.add(column);
+    }
+
+    }
+
 
   public int width() {
     return width;
@@ -48,14 +57,14 @@ public class ListMatrix<T> implements Matrix<T> {
 
   @Override
   public T get(int x, int y) {
-    // TODO
-    return null;
+
+    return matrix.get(x).get(y);
   }
 
 
   @Override
   public void set(int x, int y, T newValue) {
-    // TODO
+    matrix.get(x).set(y,newValue);
   }
 
 }
diff --git a/src/main/java/matrix/Matrix.java b/src/main/java/matrix/Matrix.java
index f2c908e..bc59511 100644
--- a/src/main/java/matrix/Matrix.java
+++ b/src/main/java/matrix/Matrix.java
@@ -58,7 +58,7 @@ public interface Matrix<T> extends Iterable<T> {
   }
 
   default Matrix<T> subMatrix(Coordinate corner, int width, int height){
-    return null ;
+    return new ListMatrix<>(width(), height(), new SubMatrixInitializer<>(this.corner));
   }
 
 
diff --git a/src/main/java/matrix/SubMatrixInitializer.java b/src/main/java/matrix/SubMatrixInitializer.java
new file mode 100644
index 0000000..368487f
--- /dev/null
+++ b/src/main/java/matrix/SubMatrixInitializer.java
@@ -0,0 +1,18 @@
+package matrix;
+public class SubMatrixInitializer <T> implements MatrixInitializer<T> {
+
+    private final Matrix <T> matrix;
+
+    private final Coordinate corner ;
+
+    public SubMatrixInitializer(Matrix<T> matrix, Coordinate corner) {
+        this.matrix = matrix;
+        this.corner = corner;
+    }
+
+    @Override
+
+    public T initalValueAt(Coordinate coordinate) {
+        return matrix.get(coordinate.plus(corner));
+    }
+}
-- 
GitLab