..\CSC120\Java\lec38_f22\src\MUPanel.java
  1 /* CSC 120 Lecture # 38
  2  * Project Description: Example of use of Math class methods for finding
  3  *                      mean and std deviation of a sample
  4  */
  5 
  6 import java.awt.*;
  7 import javax.swing.*;
  8 import java.util.*;
  9 
 10 public class MUPanel extends JPanel {
 11 
 12     private final Integer SAMPLE_SIZE = 7000;
 13     
 14     private Integer[] sample1, sample2;
 15     
 16 
 17     // constructor method
 18     public MUPanel() {
 19         setLayout(null);
 20         setPreferredSize(new Dimension(1000, 800));
 21         setName("Mean and Std Deviation of a Sample");
 22         setUp();
 23         setBackground(Color.WHITE);
 24 
 25         
 26         // sample1 is based on the range [40, 60]
 27         sample1 = new Integer[SAMPLE_SIZE];
 28         for (Integer x = 0; x < sample1.length; x++) {
 29             sample1[x] = randomValueFromRange(40, 60);
 30         } // end for
 31         
 32         // sample2 is based on the range [0, 100]
 33         sample2 = new Integer[SAMPLE_SIZE];
 34         for (Integer x = 0; x < sample1.length; x++) {
 35             sample2[x] = randomValueFromRange(10, 90);
 36         } // end for
 37 
 38         
 39     } // end of constructor
 40     
 41     public Integer randomValueFromRange(Integer low, Integer high) {
 42         Random randGen = new Random();
 43         return randGen.nextInt(high-low+1) + low;
 44     } // end of randomValueFromRange
 45     
 46     @Override
 47     public void paintComponent(Graphics g) {
 48         super.paintComponent(g); // This line must be first in this method!
 49 
 50             g.setColor(Color.BLACK);
 51             g.fillRect(0, 395, 1000, 10);
 52             g.drawLine(0, 380, 1000, 380);
 53             g.drawLine(0, 780, 1000, 780);
 54             
 55             g.setFont(new Font("SansSerif", Font.BOLD, 14));
 56             for (Integer num = 0; num <= 100; num += 10) {
 57                 g.drawString(""+num, num*9+50, 395);
 58                 g.drawString(""+num, num*9+50, 795);
 59             }
 60             
 61             drawGridlines(g);
 62                 
 63             // draw histogram for sample1 in upper screen area
 64             g.setColor(Color.RED);
 65             Integer[] buckets = new Integer[101];
 66             for (Integer b = 0; b < buckets.length; b++) {
 67                 buckets[b] = 0;
 68             }
 69             for (Integer x = 0; x < sample1.length; x++) {
 70                 buckets[sample1[x]]++;
 71             }
 72             for (Integer b = 0; b < buckets.length; b++) {
 73                 g.fillRect(b*9+50, 380-buckets[b], 6, buckets[b]);
 74             }
 75             g.setColor(Color.BLACK);
 76             g.setFont(new Font("SansSerif", Font.BOLD, 18));
 77             g.drawString("Sample 1:", 20, 50);
 78             g.drawString("Mean = " + calcMean(sample1), 30, 75);
 79             g.drawString("Std. Dev. = " + calcStdDev(sample1), 30, 100);
 80             
 81             // draw histogram for sample2 in lower screen area
 82             g.setColor(Color.RED);
 83             for (Integer b = 0; b < buckets.length; b++) {
 84                 buckets[b] = 0;
 85             }
 86             for (Integer x = 0; x < sample2.length; x++) {
 87                 buckets[sample2[x]]++;
 88             }
 89             for (Integer b = 0; b < buckets.length; b++) {
 90                 g.fillRect(b*9+50, 780-buckets[b], 6, buckets[b]);
 91             }
 92             g.setColor(Color.BLACK);
 93             g.drawString("Sample 2:", 20, 450);
 94             g.drawString("Mean = " + calcMean(sample2), 30, 475);
 95             g.drawString("Std. Dev. = " + calcStdDev(sample2), 30, 500);
 96             
 97     } // end of paintComponent()
 98     
 99     
100     
101        
102     
103     public Double calcMean(Integer[] sample) {
104         Double mean;
105         Double sum = 0.0;
106         
107         for (Integer i = 0; i < sample.length; i++) {
108             sum += sample[i];
109         }
110         mean = sum / sample.length;
111         
112         return mean;
113     }
114 
115     
116     public Double calcStdDev(Integer[] sample) {
117         Double stdDev;
118         
119         Double mean;
120         mean = calcMean(sample);
121         
122         Double numerator = 0.0;
123         for (Integer i = 0; i < sample.length; i++) {
124             numerator += Math.pow( (sample[i]-mean), 2 );
125         }
126         
127         stdDev = Math.sqrt( numerator / (sample.length-1) );
128         
129         return stdDev;
130     }
131     
132     
133     
134     
135     
136     public void drawGridlines(Graphics g) {
137         g.setColor(Color.LIGHT_GRAY);
138         
139         // top part
140         for (Integer y = 30; y < 380; y += 50) {
141             g.drawLine(0, y, 1000, y);
142             if (380-y == 50) {
143                 g.drawString("  "+(380-y), 975, y);
144             }
145             else {
146                 g.drawString(""+(380-y), 975, y);
147             }
148         }
149         
150         // bottom part
151         for (Integer y = 430; y < 780; y += 50) {
152             g.drawLine(0, y, 1000, y);
153             if (780-y == 50) {
154                 g.drawString("  "+(780-y), 975, y);
155             }
156             else {
157                 g.drawString(""+(780-y), 975, y);
158             }
159         }
160         
161         
162     } // end of drawGridlines
163     
164     /***********************************************
165      * Do NOT change or delete anything below here!
166      ***********************************************/
167     public void setUp() {
168         for (Component c: getComponents())
169             c.setSize(c.getPreferredSize());
170         JFrame f = new JFrame(getName());
171         f.setContentPane(this);
172         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
173         f.pack();
174         f.setVisible(true);    
175     }
176 
177     public static void main(String args[]){new MUPanel();}
178 
179 } // end of class MUPanel
180