/** * Programming Methodology Homework #2 Example. * Author: Shiuh-Sheng Yu * Date: 3/16/1998 * Last updated date: 3/17/1998 */ import java.io.*; import java.util.*; public class H2 { private static String nextToken(BufferedReader din) throws IOException { StringBuffer sb = new StringBuffer(); int c; try { do { c = din.read(); } while (c==' ' || c=='\n' || c=='\r' || c=='\t'); while (c!=-1 && c!=' ' && c!='\n' && c!='\t' && c!='\r') { sb.append((char)c); c = din.read(); } } catch (EOFException e) { } if (sb.length()==0) { return ""; } return sb.toString(); } private static Matrix readMatrix(BufferedReader din) throws MalMatrixException, IOException { String token = nextToken(din); int x, y; double[][] data; if (!token.equals("matrix")) { throw new MalMatrixException(); } token = nextToken(din); try { x = Integer.parseInt(token); } catch (NumberFormatException eNum) { throw new MalMatrixException(); } token = nextToken(din); try { y = Integer.parseInt(token); } catch (NumberFormatException eNum) { throw new MalMatrixException(); } data = new double[x][y]; for (int i=0; i<x; i++) { for (int j=0; j<y; j++) { try { token = nextToken(din); data[i][j] = Double.valueOf(token).doubleValue(); } catch (NumberFormatException eNum) { throw new MalMatrixException(); } } } return new Matrix(data); } public static void main(String[] args) { BufferedReader din; if (args.length != 1) { System.out.println("Usage: java H2 fname"); System.out.println("where fname is a file contains matrix data."); System.exit(0); } try { String inputbuf; din = new BufferedReader(new FileReader(args[0])); for (;!(inputbuf=nextToken(din)).equals("");) { if (inputbuf.equals("+")) { Matrix a = readMatrix(din); Matrix b = readMatrix(din); a.print(); a.add(b); System.out.println("+"); b.print(); System.out.println("="); a.print(); } else if (inputbuf.equals("*")) { Matrix a = readMatrix(din); Matrix b = readMatrix(din); Matrix c = a.multiply(b); a.print(); System.out.println("*"); b.print(); System.out.println("="); c.print(); } else if (inputbuf.equals("value")) { Matrix a = readMatrix(din); System.out.println("value of "); a.print(); System.out.println("="); System.out.println(a.determinant()); } else { break; } } } catch (Exception e) { e.printStackTrace(); System.exit(1); } } }