/*************************************************************/ /* Program Name: Lab6ExperimentControl */ /*************************************************************/ import java.awt.*; import java.applet.*; import java.awt.event.*; import java.text.DecimalFormat; import javax.swing.*; public class Lab6ExperimentControl extends Lab6ExperimentView implements ActionListener, ItemListener { private double[] data; private String[] dataString; private double sum=0, average=0; private final boolean verbose = true; // Class declaration public static void main(String args[]) { // Construct the frame new Lab6ExperimentControl(); } public Lab6ExperimentControl() // change init method to a constructor { avgButton.addActionListener(this); // Register the button maxButton.addActionListener(this); // Register the button cbOptions.addItemListener(this); // Register the ComboBox resetButton.addActionListener(this); // Register the button dataB.addActionListener(this); // register } public void actionPerformed(ActionEvent e) { String whichWidget = e.getActionCommand(); if(verbose) System.out.println("calling action perform "+ whichWidget); if (whichWidget.equals("submit") ) addPanel(); if (whichWidget.equals("reset") ) procReset(); if (whichWidget.equals("avg") ) procAvg(); if (whichWidget.equals("max") ) procMax(); validate(); repaint(); } public void itemStateChanged(ItemEvent e) { System.out.println("@ itemStateChanged"); JComboBox object = (JComboBox) e.getSource(); if(e.getStateChange() == ItemEvent.SELECTED ) switch (object.getSelectedIndex()) { case 0: System.out.println("Select Option"); break; case 1: procStd(true); break; case 2: procStd(false);break; case 3: procSort();break; case 4: procSortString();break; case 5: procSearch(resField.getText() );break; case 6: procSearchSorted(resField.getText() );break; } } private void procReset() { remove(numPanel); remove(resPanel); numPanel = new JPanel(); resField.setText(""); data = null; } public void procAvg( ) { int numData = disFields.length; data = new double[numData]; sum = 0; average= 0; for( int i = 0; i < numData ; i++ ) { if(!validateDouble(disFields[i])) break; data[i] = Double.parseDouble(disFields[i].getText()); sum = sum + data[i]; } average = sum/numData; resField.setText( "" + average); } // standard deviation sample (n-1) population (n) public void procStd(boolean sample) { int numData = disFields.length; data = new double[numData]; sum = 0; for( int i = 0; i < numData ; i++ ) { if(!validateDouble(disFields[i])) break; data[i] = Double.parseDouble(disFields[i].getText()); sum = sum + data[i]; } average = sum/numData; sum=0; for( int i = 0; i < data.length ; i++ ) sum = (data[i]-average)*(data[i]-average); if(sample) sum = Math.sqrt(sum/(numData-1)); else sum = Math.sqrt(sum/numData); resField.setText( "" + sum); } public void procMax() { if(verbose) System.out.println("Computing Max "); int numData = disFields.length; double maxValue = 0; int maxIndex = 0; double[] data = new double[numData]; for(int i=0; i < numData ; i++ ) { if(!validateDouble(disFields[i])) break; data[i] = Double.parseDouble(disFields[i].getText()); if(data[i] > maxValue) { maxValue = data[i]; maxIndex = i; } } resField.setText( "" + maxValue); } // bubble sort on data values public void procSort() { int numData = disFields.length; double temp; boolean flagSkip =false; data = new double[numData]; for(int i=0; i < numData ; i++ ) { if(!validateDouble(disFields[i])) { flagSkip = true; break; } data[i] = Double.parseDouble(disFields[i].getText()); } // bubble sort if(!flagSkip) { for(int i = 0; i < data.length; i++) for (int j = 1; j < data.length-i; j++ ) { // comparing data values with > if(data[j-1]>data[j]) { temp = data[j-1]; data[j-1]= data[j] ; data[j] = temp; } } } for(int i = 0; i < data.length; i++) disFields[i].setText(""+data[i]); } //bubble sort on String values public void procSortString() { int numData = disFields.length; String temp; dataString = new String[disFields.length]; // using the string value of the TextField for(int i=0; i < disFields.length ; i++ ) dataString[i] = disFields[i].getText(); for(int i = 0; i < dataString.length; i++) for (int j = 1; j < dataString.length-i; j++ ) // comparing using String you need to use if(dataString[j-1].compareTo(dataString[j])>0) { temp = dataString[j-1]; dataString[j-1]= dataString[j] ; dataString[j] = temp; } for(int i = 0; i < dataString.length; i++) disFields[i].setText(dataString[i]); } // search using while public void procSearch( String searchString) { if(verbose) System.out.println("@ Model call procSearch "); int numData = disFields.length; String temp; dataString = new String[numData]; // using the string value of the TextField int i=0; while( i < numData ) { dataString[i] = disFields[i].getText(); i++; } if(verbose) System.out.println("@ Model "+ i); i = 0; boolean flag = false; while( i < numData ) if(dataString[i].equals(searchString) ) { flag = true; break; } else i++; if(verbose) System.out.println("@ Model 2 "+ i + " FLAG " + flag ); } // assuming the data is sorted you can skip public void procSearchSorted( String searchString) { if(verbose) System.out.println("@ Control call procSearchSorted "); int numData = disFields.length; String temp; boolean flag = false; dataString = new String[disFields.length]; // using the string value of the TextField int i=0; while( i < numData ) { dataString[i] = disFields[i].getText(); i++; } i = 0; while( i < numData ) if(dataString[i].compareTo(searchString)>0) { System.out.println("@ Model "+ dataString[i]); flag = true; break;} // if value is larger break with flag false else i++; if(i >0 ) resField.setText(resField.getText()+" found @loc "+i ); else resField.setText(resField.getText()+" NOT found "); } public boolean validateInteger(JTextField datum) { try { int d = Integer.parseInt(datum.getText()); return true; } catch (NumberFormatException e) { if(verbose) System.out.println("invalid Integer " + datum.getText() + " please retype "); datum.setText("invalid retry"); return false; } } public boolean validateDouble(JTextField datum) { try { double d = Double.parseDouble(datum.getText()); return true; } catch (NumberFormatException e) { if(verbose) System.out.println("invalid double " + datum.getText() + " please retype "); datum.setText("invalid retry"); return false; } } } // end Class