Your task is to complete the implementation of a generic Matrix class. A matrix is a two-dimensional arrangement of elements. You access elements with a row and column index. For example,

Matrix<String> tttBoard = new Matrix<String>(3, 3);
tttBoard.put(0, 0, "x"); if (tttBoard.get(1, 2).equals("o")) . . .

Since we are not allowed to use generic arrays, we use an array list instead. We store the (i, j) element at index i * columns + j. For example, in a 10 x 10 matrix, the (3,4) element is stored at index 3 * 10 + 4 = 34.

Complete the implementations of the get and put method below.

Complete the following file:

Matrix.java

import java.util.ArrayList; public class Matrix<T> { public Matrix(int rows, int columns) { this.rows = rows; this.columns = columns; elements = new ArrayList<T>(); for (int i = 0; i < rows * columns; i++) elements.add(null); } // add your get and put methods here private ArrayList<T> elements; private int rows; private int columns; // the following method is used to check your work public static String check(int r, int c, String s) { int rows = 3; int columns = 4; Matrix<String> m = new Matrix<String>(rows, columns); // add letters of s diagonally for (int i = 0; i < s.length(); i++) { m.put(r, c, s.substring(i, i + 1)); r++; if (r >= rows) r = 0; c++; if (c >= columns) c = 0; } // make string representing matrix content String t = ""; for (int i = 0; i < rows; i++) for (int j = 0; j < columns; j++) if (m.get(i, j) == null) t += "."; else t += m.get(i, j); return t; } }