diff --git a/src/main/java/matrix/ConstantMatrixInitializer.java b/src/main/java/matrix/ConstantMatrixInitializer.java index 88d798b4b1a0e79292168f2a8d6f47024457fdae..86d2574d6268dfd4e86f08a5d69b95792263e212 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 418e05d20f2c6e4cd387a7b4de998819cd72a9b8..5074b6cdeb1ebb9a7a29e19cf7b1941b68ea8292 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 f2c908e63e1e44a2552bbf98a946fba6ba6bee6b..bc595112a651ed3422a1234317995a31546d7644 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 0000000000000000000000000000000000000000..368487f55302515acd794169718829e4b8b21b06 --- /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)); + } +}