docs: private static void print(Matrix m, Control control, NumberFormatter formatter) {
  		if (m==null || control==null || formatter==null) throw new NullPointerException();
  		String[][] elements=new String[m.getRowCount()][m.getColumnCount()];
  		int[] columnWidths=new int[m.getColumnCount()];
  		int maxColumnWidth = 0;
  		for (int i=0; i<m.getRowCount(); i++) for (int j=0; j<m.getColumnCount(); j++) {
  			elements[i][j]=formatter.format(m.getQuick(i,j));
  			columnWidths[j]=Math.max(columnWidths[j], elements[i][j].length());
  			maxColumnWidth=Math.max(maxColumnWidth, elements[i][j].length());
  		}
  		if (control.columnWidthsEqual) {
  			for (int i=0; i<columnWidths.length; i++)
  				columnWidths[i]=maxColumnWidth;
  		}
  		PrintWriter out=control.writer;
  		for (int row=0; row<m.getRowCount(); row++) {
  			out.write(control.linePrefix);
  			
  			for (int col=0; col<m.getColumnCount(); col++) {
  				if (col>0)
  					out.write(control.columnSeparator);
  				int padding=columnWidths[col]-elements[row][col].length();
  				switch (control.alignment) {
  					case LEFT:
  						out.write(elements[row][col]);
  						pad(out, padding);
  						break;
  					case RIGHT:
  						pad(out, padding);
  						out.write(elements[row][col]);
  						break;
  					case CENTER_LEFT:
  						pad(out, padding/2);
  						out.write(elements[row][col]);
  						pad(out, (padding+1)/2);
  						break;
  					case CENTER_RIGHT:
  						pad(out, (padding+1)/2);
  						out.write(elements[row][col]);
  						pad(out, padding/2);
  						break;
  				}
  			}
  			
  			out.write(control.lineSuffix);
  			out.println();
  		}
  		out.flush();
  	}