/////// Matrix.java /////// class Matrix { public Matrix(int r, int c) { if ( r > 0 && c > 0 ) mat = new double[nr=r][nc=c]; else { mat = null; nr=nc=0; } } public Matrix(double[][] m) { mat = m; nr = m.length; nc = m[0].length; } public double getElement(int i, int j) { return mat[i][j]; } public void setElement(int i, int j, double e) { mat[i][j] = e; } public int rows() { return nr; } public int cols() { return nc; } public Matrix times(Matrix b) { if ( nc != b.nr ) return null; // incompatible dimensions Matrix p = new Matrix(nr,b.nc); for (int i=0 ; i < nr ; i++) { for (int j=0 ; j < b.nc; j++) p.setElement(i,j, rowTimesCol(i, b.mat, j)); } return(p); } public String toString() { StringBuffer buf = new StringBuffer(); for (int i = 0; i < nr; i++) { buf.append("( "); for (int j = 0; j < nc-1; j++) { buf.append(mat[i][j]); buf.append(" "); } buf.append(mat[i][nc-1]); buf.append(" )\n"); } buf.setLength(buf.length()-1); return new String(buf); } public static void main(String[] args) { double[][] a = { {1.0,-2.0,1.5}, {1.0,2.4,3.1}}; double[][] b = { {9.0,0.7},{-2.0,30.5},{-9.0,4.0}}; Matrix m1 = new Matrix(a); Matrix m2 = new Matrix(b); Matrix prod = m1.times(m2); System.out.println(prod); } private double rowTimesCol(int ri, double[][] b, int ci) { double sum=0.0d; double[] row = mat[ri]; for (int k=0; k < b.length; k++) sum += row[k] * b[k][ci]; return(sum); } private double[][] mat; // the matrix private int nr, nc; // rows and cols }