rendered paste body
import java.io.*;
import java.util.*;
import cs1.Keyboard;
public class Stats
{
private double[] grades;
private final int DEFAULTSIZE=10;
private int count;
private int avg;
private double stddev;
private double mean;
private boolean avgcurrent=false;
Random r = new Random();
public int appearances = 0;
public int mode;
private int[] modes;
public Stats()
{
this.grades = new double[DEFAULTSIZE];
}
public void calcAverage()
{
int sum=0;
//int i=0;
//while (i<count)
//{
// sum= sum + (int)grades[i];
// i++;
//}
int i;
for (i=0;i<count;i++)
{
sum=sum+(int)grades[i];
}
mean = (double)sum/(double)count;
avgcurrent=true;
}
public double getAverage()
{
// avgcurrent==false
if (!avgcurrent) //if not avgcurrent
calcAverage();
return mean;
}
private void calcStddev()
{
double sum=0;
if (!avgcurrent)
this.calcAverage();
int i=0;
while (i<count)
{
sum = sum + (mean-grades[i])*(mean-grades[i]);
i++;
}
sum = sum / count;
stddev=Math.sqrt(sum);
}
public double getStddev()
{
return stddev;
}
private void growArray()
{
double[] tmp = new double[grades.length*2];
int i=0;
while (i<count)
{
tmp[i]=grades[i];
i++;
}
grades=tmp;
}
public void readGradesFromKeyboard()
{
double grade;
System.out.print("Please enter a grade (negative to end):");
grade = Keyboard.readDouble();
while (grade >=0)
{
if (count == grades.length)
growArray();
grades[count]=grade;
count++;
System.out.print("Please enter a grade (negative to end):");
grade = Keyboard.readDouble();
}
avgcurrent=false;
}
private void printBar(int low, int high)
{
for (int i=0;i<count;i++)
{
if (grades[i]>=low && grades[i]<high)
System.out.print('*');
}
System.out.println();
}
public void printHist()
{
int j;
for (int i=0;i<10;i++)
{
j=i*10;
System.out.print(j+" - " +(j+10)+":");
printBar(j,j+10);
}
}
private String getBar(int l)
{
String s = "";
for (int i=0;i<l;i++)
s=s+"*";
s=s+'\n';
return s;
}
public String getHist()
{
String s="";
int[] tallies = new int[10];
for (int i=0;i<count;i++)
{
tallies[ (int)(grades[i]/10) ] =
tallies[ (int)(grades[i]/10) ] + 1;
}
for (int i=0;i<10;i++)
{
s = s + ""+(i*10)+" - "+" "+(i*10+10)+":";
s=s+getBar(tallies[i]);
}
return s;
}
public Stats(int size)
{
this.grades = new double[size];
for (int i=0;i<10;i++)
{
grades[i] = r.nextInt(101);
}
}
private int[] sortGrades()
{
int[] gradesSorter = new int[101];
for(int i=0;i<grades.length;i++)
gradesSorter[(int)grades[i]]++;
return gradesSorter;
}
public void calcMode()
{
int[] gradesSorter = sortGrades();
//System.out.println(gradesSorter[90]);
//System.out.println(gradesSorter[100]);
for(int i=0;i<gradesSorter.length;i++)
{
if(gradesSorter[i] > appearances)
appearances = gradesSorter[i];
}
System.out.println(appearances);// always prints out something messed up
}
private void growArray2()
{
int[] tmp = new int[modes.length+1];
for(int i=0;i<modes.length;i++)
{
tmp[i]=modes[i];
}
modes=tmp;
}
public void calcModes()
{
int[] gradesSorter = sortGrades();
modes = new int[1];
int x = 0;
for(int i = 0; i<gradesSorter.length; i++)
{
if(gradesSorter[i] == appearances)
{
if (x >= modes.length)
{
growArray2();
}
modes[x] = i;
x++;
}
}
}
public String getModes()
{
String s = new String();
for(int i = 0; i<modes.length; i++)
{
s = s + "," +modes[i];
}
return s;
}
}