diff --git a/src/main/java/util/Matrix.java b/src/main/java/util/Matrix.java index a2d05d6c9f4863c384004e64c92d52c0ad68347a..3e4cb8ef145206f559d354d392462c30c109416c 100644 --- a/src/main/java/util/Matrix.java +++ b/src/main/java/util/Matrix.java @@ -1,21 +1,58 @@ package util; + import java.util.ArrayList; -public class Matrix<E> { +import java.util.Iterator; +import java.util.NoSuchElementException; + +public class Matrix<E> implements Iterable<E> { private ArrayList<ArrayList<E>> matrix; - public Matrix(){ + + public Matrix() { this.matrix = new ArrayList<ArrayList<E>>(); } - public E get(int x, int y){ + public E get(int x, int y) { return matrix.get(x).get(y); } - public E set(int x, int y, E object){ + + public E set(int x, int y, E object) { return matrix.get(x).set(y, object); } - public void clear(){ + + public void clear() { this.matrix = new ArrayList<ArrayList<E>>(); } - public int size(){ - return matrix != null ? matrix.get(0).size()*matrix.size() : 0; + + public int size() { + return matrix != null ? matrix.get(0).size() * matrix.size() : 0; + } + + @Override + public Iterator<E> iterator() { + return new MatrixIterator(); + } + + private class MatrixIterator implements Iterator<E> { + private int row = 0; + private int col = 0; + + @Override + public boolean hasNext() { + return row < matrix.size() && col < matrix.get(row).size(); + } + + @Override + public E next() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + E element = matrix.get(row).get(col); + col++; + if (col >= matrix.get(row).size()) { + col = 0; + row++; + } + return element; + } } }