Determinant
<< MatrixApplet | OtherProjectsTrailIndex | Curve-O-Matic >>
A working version is here
Determinant.java
import java.awt.*; import java.applet.*; import java.awt.event.*; /** * Class Determinant - write a description of the class here * * @author Chris Thiel, OFMCap * @version 19 Jan 2011 */ public class Determinant extends Applet implements ItemListener, ActionListener { private Label detLabel; private Panel matrixPanel; private Button button; private Choice orderChoice; private TextField[][] cells; Panel centerPanel; public void init() { setLayout(new BorderLayout()); button= new Button("Compute Determinant"); button.addActionListener(this); Panel buttonPanel= new Panel(new FlowLayout(FlowLayout.CENTER)); buttonPanel.add(button); add(buttonPanel, BorderLayout.SOUTH); orderChoice=new Choice(); orderChoice.add("1x1"); orderChoice.add("2x2"); orderChoice.add("3x3"); //orderChoice.add("4x4"); //orderChoice.add("5x5"); Panel choicePanel = new Panel(new FlowLayout(FlowLayout.CENTER)); choicePanel.add(orderChoice); add(choicePanel , BorderLayout.NORTH); detLabel=new Label(" = ?"); centerPanel=new Panel(); add(centerPanel, BorderLayout.CENTER); initMatrix(2); orderChoice.select(2-1); orderChoice.addItemListener(this); } public void initMatrix(int n) { matrixPanel = new Panel(); matrixPanel.setLayout(new GridLayout(n,n)); cells = new TextField[n][n]; for (int i=0; i<n; i++) for (int j=0; j<n; j++){ if (i==j){ cells[i][j]=new TextField("1"); }else { cells[i][j]=new TextField("0"); } cells[i][j].setColumns(8); matrixPanel.add(cells[i][j]); } this.remove(centerPanel); centerPanel=new Panel(); centerPanel.setLayout(new FlowLayout(FlowLayout.CENTER) ); centerPanel.add(matrixPanel); detLabel.setText(" = ? Press Button below to compute"); //detLabel.setSize(80,30); centerPanel.add(detLabel); add(centerPanel, BorderLayout.CENTER); validate(); } public int getMatrixSize(){ return orderChoice.getSelectedIndex()+1; } /** * Paint method for applet. * * @param g the Graphics object for this applet */ public void paint(Graphics g) { detLabel.update(g); matrixPanel.update(g); // button.update(g); //centerPanel.update(g); //this.update(g); } /** * ItemListener Implementation */ public void itemStateChanged(ItemEvent e) { initMatrix(orderChoice.getSelectedIndex()+1); //detLabel.setText("= " + getMatrixSize()); } /** * ActionEventLister implementation */ public void actionPerformed(ActionEvent e) { // Need to compute the determinant using Sarrus' method int n=getMatrixSize(); // n=1 is a special case. if (n==1){ detLabel.setText(" = "+cells[0][0].getText()); } else if (n==2) { Rational ad=new Rational(cells[0][0].getText()); ad=ad.multiply(new Rational(cells[1][1].getText())); Rational bc=new Rational(cells[0][1].getText()); bc=bc.multiply(new Rational(cells[1][0].getText())); bc=bc.multiply(new Rational(-1)); ad=ad.add(bc); detLabel.setText(" = "+ad.toString()); } else { //n>=3 Rational sum=new Rational(0); for (int i=0; i<n; i++) { Rational x=new Rational(1); for (int j=0; j<n; j++) { x=x.multiply(new Rational(cells[(i+j)%n][j].getText()) ); } sum=sum.add(x); } Rational diff=new Rational(0); for (int i=0; i<n; i++) { Rational x=new Rational(1); for (int j=0; j<n; j++) { x=x.multiply(new Rational(cells[(i+j)%n][n-j-1].getText()) ); } diff=diff.add(x); } diff=diff.multiply(new Rational(-1)); sum=sum.add(diff); //detLabel.setText(" = "+sum.toString()); //Rational t=new Rational(cells[0][0].getText()); detLabel.setText(" = "+sum.toString()); } } }