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

JAVA PROGRAMMING: Attached is a simple program, RandomDoubles, to generate a giv

ID: 3686175 • Letter: J

Question

JAVA PROGRAMMING:

Attached is a simple program, RandomDoubles, to generate a given number of random numbers within a range. Rewrite the indicated method to use a stream.

import java.util.Scanner;

public class RandomDoubles {

   public static void main(String[] args) {
       Scanner kybd = new Scanner(System.in);
       System.out.println("Enter ceiling, floor, number of samples: ");
       double ceil = kybd.nextDouble();
       double floo = kybd.nextDouble();
       int numSamples = kybd.nextInt();
       if (floo >= ceil || ceil > 1 || floo > 1) {
           System.out.println("invalid ceiling, floor");
           System.exit(0);
       }
       double avg = calcDoubles(floo, ceil, numSamples);
       System.out.println("Average is " + avg);
   }

   private static double calcDoubles(double floo, double ceil, int numSamples) {
       // rewrite this method to use streams
       double[] samples = genDoubles(floo, ceil, numSamples);
       double tot = 0;
       for (int i = 0; i < samples.length; i++) {
           tot += samples[i];
       }
       double avg = tot / samples.length;
       return avg;
   }

   public static double[] genDoubles(double floor, double ceiling, int num) {
       int cnt = 0;
       double range = ceiling - floor;
       double[] rv = new double[num];
       while (cnt < num) {
           double v = Math.random();
           v = v * range + floor;
           rv[cnt++] = v;
       }
       return rv;
   }

}

Explanation / Answer

import java.util.Scanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class RandomDoubles {

   public static void main(String[] args) {
       Scanner kybd = new Scanner(System.in);
       InputStream is = null;
       BufferedReader br = null;
       double ceil=0,floo=10;
       int numSamples=10;
       try
       {
           is = System.in;
           br = new BufferedReader(new InputStreamReader(is));
           System.out.println("Enter ceiling: ");
           ceil = Double.parseDouble(br.readLine());
           System.out.println("Enter floor: ");
           floo = Double.parseDouble(br.readLine());
           System.out.println("Enter number of samples: ");
           numSamples = Integer.parseInt(br.readLine());
       }
       catch (Exception ioe)
       {
           System.out.println("Exception while reading input " + ioe);
       }
       if (floo >= ceil || ceil > 1 || floo > 1) {
           System.out.println("invalid ceiling, floor");
           System.exit(0);
       }
       double avg = calcDoubles(floo, ceil, numSamples);
       System.out.println("Average is " + avg);
   }

   private static double calcDoubles(double floo, double ceil, int numSamples) {
       // rewrite this method to use streams
       double[] samples = genDoubles(floo, ceil, numSamples);
       double tot = 0;
       for (int i = 0; i < samples.length; i++) {
           tot += samples[i];
       }
       double avg = tot / samples.length;
       return avg;
   }

   public static double[] genDoubles(double floor, double ceiling, int num) {
       int cnt = 0;
       double range = ceiling - floor;
       double[] rv = new double[num];
       while (cnt < num) {
           double v = Math.random();
           v = v * range + floor;
           rv[cnt++] = v;
       }
       return rv;
   }

}