import java.util.*;

class Statistics {

	public static double[] bubbleSort(double [] userNums){
		double [] sortedNums = (double []) userNums.clone();
		for(int i = 0;i < sortedNums.length; i ++){
			for(int j = i + 1;j < sortedNums.length;j ++){
				if(sortedNums[i] > sortedNums [j]){
					double temp = sortedNums[i];
					sortedNums[i] = sortedNums[j];
					sortedNums[j] = temp;
				}
			}
		}
		return sortedNums;
	}

	public static double[] arrayFiller(){
		Random r = new Random();
		double [] filledUserNums = new double [20];
		for (int i = 0;i < 20; i++){
			filledUserNums[i] = ((double) r.nextInt() % 100000) / 100;
		}
		return filledUserNums;
	}

	public static void arrayPrinter(double [] userNums){
		double [] nums = bubbleSort(userNums);
		System.out.println("For the array: ");
		for (int i = 0; i < nums.length; i ++){
			System.out.print(nums[i] + ", ");
		}
		System.out.println("\n");
	}

	public static void modePrinter(double [] userNums){
		ArrayList<Double> printerArray = mode(userNums);
		System.out.println("mode: ");
		for (int i = 0; i < printerArray.size(); i ++){
			System.out.print(printerArray.get(i) + ", ");
		}
	}

	public static double mean(double [] userNums){
		double [] nums = bubbleSort(userNums);
		int meanSum = 0;
		for(int i = 0;i <= nums.length - 1;i++){
			meanSum += nums[i];
		}
		meanSum /= nums.length;
		return meanSum;
	}

	public static double median(double [] userNums){
		double [] nums = bubbleSort(userNums);
		if (nums.length % 2 != 0){
			return nums[(nums.length - 1) / 2];
		}
		else{
			return ((nums[(nums.length - 1) / 2] + nums[nums.length / 2]) / 2);
		}
	}

	public static double range(double [] userNums){
		double [] nums = bubbleSort(userNums);
		double rangeNum = (nums[nums.length - 1]) - nums[0];
		return rangeNum;
	}

	public static ArrayList<Double> mode(double [] userNums){
		double [] nums = bubbleSort(userNums);
		ArrayList<Double> maxValues = new ArrayList <Double> ();
		ArrayList<Double> listNums = new ArrayList <Double> ();
		int maxCount = 0;
		int lastCount = 0;
		for(int l = 0; l < nums.length; l ++){
			listNums.add(nums[l]);
		}
		for (int i = 0; i < nums.length; i ++) {
			int count = 1;
			for (int j = 1 + i;j < nums.length; j ++) {
				if (nums[j] == nums[i])
					count ++;
			}
			if (count > maxCount) {
				maxCount = count;
				maxValues.add(nums[i]);
			}
			if (count > maxCount && count > lastCount){
				maxCount = count;
				maxValues.clear();
				maxValues.add(nums[i]);
			}
			lastCount = count;
		}
		if (maxCount > 0)
			return maxValues;
		return listNums;
	}
}
