ArraysAndRandomNumbers.java

  1. package org.drip.zen.juice;

  2. /*
  3.  * 1) Concept of Random Number
  4.  * 2) Generate a Random Number between 0 and 1
  5.  * 3) Concept of evenly distributed Random Number between Left and Right
  6.  * 4) Generate a Random Number between "Lower Bound" and "Upper Bound"
  7.  * 5) Concept of an Array - syntax and Usage
  8.  * 6) Generate an Array of bounded Random Numbers
  9.  * 7) Concept of Distribution of Buckets
  10.  */

  11. public class ArraysAndRandomNumbers {

  12.     static double RandomNumber0_1()
  13.     {
  14.         return Math.random();
  15.     }

  16.     static double RandomNumber (double lowerBound, double upperBound)
  17.     {
  18.         double randomNumber = lowerBound + (upperBound - lowerBound) * RandomNumber0_1();

  19.         return randomNumber;
  20.     }

  21.     static double[] RandomNumberArray (double lowerBound, double upperBound, int arraySize)
  22.     {
  23.         double[] randomArray = new double[arraySize];

  24.         for (int counter = 0; counter < arraySize; counter = counter + 1)
  25.         {
  26.             randomArray[counter] = RandomNumber (lowerBound, upperBound);
  27.         }

  28.         return randomArray;
  29.     }

  30.     static int[] QuartileDistribution (double lowerBound, double upperBound, double[] randomNumberArray)
  31.     {
  32.         int numberOfBuckets = 4;
  33.         int[] quartileBuckets = new int[numberOfBuckets];
  34.         int arraySize = randomNumberArray.length;
  35.         double bucketWidth = (upperBound - lowerBound) / numberOfBuckets;

  36.         for (int counter = 0; counter < arraySize; counter = counter + 1)
  37.         {
  38.             double randomNumber = randomNumberArray[counter];

  39.             if (randomNumber >= lowerBound && randomNumber < lowerBound + bucketWidth)
  40.                 quartileBuckets[0] = quartileBuckets[0] + 1;
  41.             else if (randomNumber >= lowerBound + bucketWidth && randomNumber < lowerBound + 2 * bucketWidth)
  42.                 quartileBuckets[1] = quartileBuckets[1] + 1;
  43.             else if (randomNumber >= lowerBound + 2 * bucketWidth && randomNumber < lowerBound + 3 * bucketWidth)
  44.                 quartileBuckets[2] = quartileBuckets[2] + 1;
  45.             else if (randomNumber >= lowerBound + 3 * bucketWidth && randomNumber <= upperBound)
  46.                 quartileBuckets[3] = quartileBuckets[3] + 1;
  47.         }

  48.         return quartileBuckets;
  49.     }

  50.     public static void main (String[] input)
  51.     {
  52.         double myLowerBound = 0;
  53.         double myUpperBound = 100;
  54.         int myArraySize = 100000;

  55.         double[] myRandomNumberArray = RandomNumberArray (myLowerBound, myUpperBound, myArraySize);

  56.         int[] myQuartileBuckets = QuartileDistribution (myLowerBound, myUpperBound, myRandomNumberArray);

  57.         System.out.println ("\tFirst Quartile  : " + myQuartileBuckets[0] + " | " + (100. * myQuartileBuckets[0] / myArraySize) + "%");

  58.         System.out.println ("\tSecond Quartile : " + myQuartileBuckets[1] + " | " + (100. * myQuartileBuckets[1] / myArraySize) + "%");

  59.         System.out.println ("\tThird Quartile  : " + myQuartileBuckets[2] + " | " + (100. * myQuartileBuckets[2] / myArraySize) + "%");

  60.         System.out.println ("\tFourth Quartile : " + myQuartileBuckets[3] + " | " + (100. * myQuartileBuckets[3] / myArraySize) + "%");
  61.     }
  62. }