package edu.hawaii.ics.yucheng; /** * Implementation of a matrix with elements of type boolean. */ class BooleanMatrix { /** * Returns true if the specified value is outside the range. * * @param value The value to check. * * @param low The low value (inclusive). * * @param high The high value (inclusive). * * @return True indicates the value is outside of the range. */ private static boolean exceeds(final int value, final int low, final int high) { return value < low || value > high; } /** The number of columns in the matrix. */ public final int columns; /** The array of boolean values. */ private final boolean[] myArray; /** The number of rows in the matrix. */ public final int rows; /** * Initializes a new instance of the class. * * @param rows The number of rows in the matrix. * * @param columns The number of columns in the matrix. */ public BooleanMatrix(final int rows, final int columns) { if (columns <= 0) throw new IllegalArgumentException("columns"); if (rows <= 0) throw new IllegalArgumentException("rows"); this.columns = columns; this.rows = rows; myArray = new boolean[columns * rows]; } /** * Returns the array index of an element in the matrix. * * @param row The row. * * @param column The column. * * @return The index in the array. */ private int indexOf(final int row, final int column) { if (exceeds(column, 0, columns - 1)) throw new IndexOutOfBoundsException("x"); if (exceeds(row, 0, rows - 1)) throw new IndexOutOfBoundsException("y"); return columns * row + column; } /** * Returns true if an element in the matrix is marked true. * * @param row The row. * * @param column The column. * * @return True indicates the element is marked true. */ public boolean isMarked(final int row, final int column) { return myArray[indexOf(row, column)]; } /** * Marks an element in the matrix as true. * * @param row The row. * * @param column The column. */ public void mark(final int row, final int column) { myArray[indexOf(row, column)] = true; } /** * Returns the string representation of the class data. * * @return The string representation of the class data. */ @Override public String toString() { final StringBuilder builder = new StringBuilder(); for (int j = 0; j < rows; j++) { for (int i = 0; i < columns; i++) builder.append(isMarked(j, i) ? "1" : "0"); builder.append("\n"); } return builder.toString(); } /** * Marks an element in the matrix as false. * * @param row The row. * * @param column The column. */ public void unmark(final int row, final int column) { myArray[indexOf(row, column)] = false; } }