Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

G iven the menu-driven program BasicStatisticsCalculator that reads a series of

ID: 3568747 • Letter: G

Question

Given the menu-driven program BasicStatisticsCalculator that reads a series of integer numbers from the console and shows basic statistics associated to the series. Improve the prototype version provided below. The main problem of this prototype version has to do with the use of a static array for the management of the series. For static arrays, the size must be defined in compilation time.

Use the data type ArrayList in order to store the series, in such a way that the allocation of memory associated to the array is carried out, dynamically in run time, in function of the number of elements inserted by the user.


/*
This program implements a BasicStatisticsCalculator based on a Menu-driven app.
*/

import java.util.Scanner; // Scanner is in the java.util package
import java.util.*;

public class BasicStatisticsCalculator {  

//Replace this static array by a dynamic array (ArrayList)
static final int NUMBER_OF_ELEMENTS=6;
static int[] numbers = new int[NUMBER_OF_ELEMENTS];


  
public static void main(String[] args) {

   do{   
switch(menu()){
case 'a': insertSeries(numbers); break;
case 'b': mean(numbers); break;
case 'c': median(numbers); break;
case 'd': mode(numbers); break;
case 'e': sd(numbers); break;                 
                 
case 'f': showSeries(numbers); break;
case 'g': greaterThanMean(numbers); break;
case 'h': smallerThanMean(numbers); break;
case 'i': bubbleSort(numbers); break;
case 'j': fullReport(numbers); break;
  
case 'q': System.exit(0);
}
   }while(true);
}

   //Prototypes
   static char menu(){
   Scanner input=new Scanner(System.in);

   System.out.println(" BASIC STATISTICS CALCULATOR");
   System.out.println(" a. Insert Series");
   System.out.println(" b. Mean");
   System.out.println(" c. Median");
   System.out.println(" d. Mode");
   System.out.println(" e. Standard Deviation");     

   System.out.println(" f. Show Series");
   System.out.println(" g. Show Elements greater than the mean");
   System.out.println(" h. Show Elements smaller than the mean");
   System.out.println(" i. Show series in order");
   System.out.println(" j. Show Full Report");   

   System.out.println(" q. Quit");
   System.out.print(" Insert option: ");
     
   return(input.next().charAt(0));  
   }   
  
   /*Insert series */
   static void insertSeries(int[] numbers){
java.util.Scanner input = new java.util.Scanner(System.in);
for (int i = 0; i < numbers.length; i++) {
System.out.print("Enter a new number: ");
numbers[i] = input.nextInt();
}
}
  

   /*Show series */
   static void showSeries(int[] numbers){
System.out.print(" Series: ");
for (int i = 0; i < numbers.length; i++) {
System.out.print(numbers[i]+" ");
}
}

   /*Show series overloaded with two parameters */
   static void showSeries(int[] numbers, String s){
System.out.print(" "+s);
for (int i = 0; i < numbers.length; i++) {
System.out.print(numbers[i]+" ");
}
}

  
   /*Find the mean value */
   static void mean(int[] numbers){
float sum=0;
for (int i = 0; i < numbers.length; i++) sum+=numbers[i];
System.out.print(" Mean: "+String.format("%.2f",sum/numbers.length));
}
  
static float mean2(int[] numbers){
float sum=0;
for (int i = 0; i < numbers.length; i++) sum+=numbers[i];
return (sum/numbers.length);
}
  
  
   /*Find the median value */
   static void median(int[] numbers){
//Copy vector to be sorted
   int[] vector=numbers.clone();  
     
       //Sort the input sequence
       java.util.Arrays.sort(vector);
      
       //Show the median
       int mid=vector.length/2;
       if (vector.length%2!=0) System.out.print(" Median: "+vector[mid]);
else System.out.print(" Median: "+String.format("%.2f",(vector[mid]+vector[mid-1])/2.0));   
}   


   /*Find the mode value */
   static void mode(int[] numbers){
//Create a frequency vector
       int offset=min(numbers);
       int[] numbers2=numbers.clone();
       for(int i=0; i<numbers2.length; i++) numbers2[i]=numbers[i]-offset;      
      
       int interval=max(numbers)-offset;
   int[] frequency=new int[interval+1];
       for(int i=0; i<numbers.length; i++) frequency[numbers2[i]]++;  
  
       if (maxIndex(frequency)==-1) System.out.print(" Mode: All elements have the same frequency");
       else System.out.print(" Mode: "+String.format("%.2f",(float)(maxIndex(frequency)+offset)));
}
  

    /*Find the naximum value */
   static int max(int[] numbers){
       int max=numbers[0];
       for (int i = 1; i < numbers.length; i++) if(max<numbers[i]) max=numbers[i];
       return max;
}
  
   /*Find the minimum value */
   static int min(int[] numbers){
       int min=numbers[0];
       for (int i = 1; i < numbers.length; i++) if(min>numbers[i]) min=numbers[i];
       return min;
}

    /*Find the naximum value */
   static int maxIndex(int[] frequency){
   boolean noMax=true;
   //Check to see if there is no maximum
       int max=max(frequency);
       for (int i = 0; i < frequency.length; i++) if (max!=frequency[i] && frequency[i]!=0) noMax=false;
  
       //Return the index associated to the maximum
       if(noMax) return -1;
       else{
           max=frequency[0];
           int index=0;
           for (int i = 0; i < frequency.length; i++) if(max<frequency[i]) {max=frequency[i]; index=i;}
           return index;
       }
}   


   /*Find the standard deviation */
   static void sd(int[] numbers){
float sum=0;
           float mean=mean2(numbers);
for (int i = 0; i < numbers.length; i++) sum+=Math.pow(mean-numbers[i],2);
System.out.print(" Standard deviation: "+String.format("%.2f",Math.sqrt(sum/numbers.length)));
  
}   
  
   /*Show values greater than mean */
   static void greaterThanMean(int[] numbers){
float sum=0;
float mean;
for (int i = 0; i < numbers.length; i++) sum+=numbers[i];
mean=sum/numbers.length;
          
System.out.print(" Elements greater than mean: ");
for (int i = 0; i < numbers.length; i++) if (numbers[i]>mean) System.out.print(numbers[i]+" ");
}

   /*Show values smaller than mean */
   static void smallerThanMean(int[] numbers){
float sum=0;
float mean;
for (int i = 0; i < numbers.length; i++) sum+=numbers[i];
mean=sum/numbers.length;
          
System.out.print(" Elements smaller than mean: ");
for (int i = 0; i < numbers.length; i++) if (numbers[i]<mean) System.out.print(numbers[i]+" ");
}
  
  
/*Bubble sort algorithm */  
   static void bubbleSort(int[] series){
   if (series!=null) {
           int[] vector=series.clone();
          
           int aux;
           for (int i=0; i<vector.length; i++){
               for(int j=0; j<vector.length-(i+1); j++){
                           if(vector[j]>vector[j+1]){
                               aux=vector[j+1];
                               vector[j+1]=vector[j];
                               vector[j]=aux;
                           }
                   }
           }  
           showSeries(vector,"Ordered series: ");
   }
      
   }
  
  
   /*Show all statistics*/
   static void fullReport(int[] numbers){
showSeries(numbers);
mean(numbers);
median(numbers);
       mode(numbers);
       sd(numbers);
greaterThanMean(numbers);
smallerThanMean(numbers);
bubbleSort(numbers);
}

}//End BasicStatisticCalculator

Explanation / Answer

import java.util.Scanner; // Scanner is in the java.util package public class BasicStatisticsCalculator { static final int NUMBER_OF_ELEMENTS=6; static int[] numbers=new int[NUMBER_OF_ELEMENTS]; public static void main(String[] args) { do { switch(menu()) { case 'a': insertSeries(numbers); break; case 'b': mean(numbers); break; case 'c': median(numbers); break; case 'd': mode(numbers); break; case 'e': sd(numbers); break; case 'f': showSeries(numbers); break; case 'g': greaterThanMean(numbers); break; case 'h': smallerThanMean(numbers); break; case 'i': bubbleSort(numbers); break; case 'j': fullReport(numbers); break; case 'q': System.exit(0); } } while(true); } //Menu Display static char menu(){ Scanner input=new Scanner(System.in); System.out.println(" BASIC STATISTICS CALCULATOR"); System.out.println(" a. Insert Series"); System.out.println(" b. Mean"); System.out.println(" c. Median"); System.out.println(" d. Mode"); System.out.println(" e. Standard Deviation"); System.out.println(" f. Show Series"); System.out.println(" g. Show Elements greater than the mean"); System.out.println(" h. Show Elements smaller than the mean"); System.out.println(" i. Show series in order"); System.out.println(" j. Show Full Report"); System.out.println(" q. Quit"); System.out.print(" Insert option: "); return(input.next().charAt(0)); }//END menu display /*Insert series */ static void insertSeries(int[] numbers) { java.util.Scanner input = new java.util.Scanner(System.in); for (int i = 0; i