..\CSC120\Java\lec38_f22\src\MUPanel.java |
1
2
3
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
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
27 sample1 = new Integer[SAMPLE_SIZE];
28 for (Integer x = 0; x < sample1.length; x++) {
29 sample1[x] = randomValueFromRange(40, 60);
30 }
31
32
33 sample2 = new Integer[SAMPLE_SIZE];
34 for (Integer x = 0; x < sample1.length; x++) {
35 sample2[x] = randomValueFromRange(10, 90);
36 }
37
38
39 }
40
41 public Integer randomValueFromRange(Integer low, Integer high) {
42 Random randGen = new Random();
43 return randGen.nextInt(high-low+1) + low;
44 }
45
46 @Override
47 public void paintComponent(Graphics g) {
48 super.paintComponent(g);
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
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
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 }
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
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
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 }
163
164
165
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 }
180