1. Member Join Date
Mar 2012
Posts
34
Rep Power
0

## Already finished 1-5. Wondering if Someone can help with Steps 6-9. Please & Thanks!

EventFrequency.java
Java Code:
```import java.util.Scanner;
public class EventFrequency {

public static void main(String[] args) {
// set up to get user input
Scanner scan = new Scanner(System.in);

// ask user for the average number of events per time interval
System.out.println("What average number of events per time interval do you want?");
int lambda = scan.nextInt();

// ask user for the number of time intervals to observe
System.out.println("How many time intervals do you want to observe?");
int times = scan.nextInt();

// instantiate a Poisson object named myDist with average number of events
Poisson myDist = new Poisson(lambda);

// step 1:
// declare an int array named "counts" to count coin flip occurences
// make its size one larger than 3 * lambda
int counts [] = new int [3 * lambda + 1];

// step 2:
// initialize all of the values in the counts array to 0
for ( int i =0; i < counts.length; i++)
{
counts[i] = 0;
}

// step 3:
// count the number of events occurring in each time interval observed

for (int i =0; i < times; i++)
{
int k = myDist.getValue();
counts[k]++;
}

// step 4:
// print out the estimated probabilities of zero events and lambda events

float zeroevents= counts / (float)times;
float lambdaevents = counts[lambda] / (float)times;
System.out.println("Zero Events \t" +zeroevents);
System.out.println("Lambda Events \t" +lambdaevents);

// step 5:
// instantiate an object of the Histogram class with
// the array to be drawn, the indices of valid data,
// and the maximum length of the bars in the histogram
//
// call its draw methods to draw the two histograms

int minIndex = 0;
int maxIndex = counts.length-1;
int maxLength = (100 * counts[lambda] / times);

Histogram event = new Histogram(counts, minIndex,maxIndex,maxLength);

event.drawHor();
event.drawVer();

}
} /*201220*/

Poisson.java

import java.util.Random;
public class Poisson
{
private int lambda;
private double values[];
public Poisson(int lambda)
{
this.lambda = lambda;
this.values = new double [3 * lambda];
this.values = functionOfKAndLambda(0);
for (int i = 1; i < values.length; i++)
this.values[i] = this.values[i-1] + functionOfKAndLambda(i);
}
private double functionOfKAndLambda(int k)
{
return Math.pow(lambda, k) * Math.pow(Math.E, -lambda) / factorial(k);
}
private long factorial(long n)
{
long factorial = 1;
// write the code for a loop to calculate factorial of n here
for (long i = 2; i <= n; i++)
factorial = i * factorial;
return factorial;
}
public int getValue()
{
double random = Math.random();
for (int i = 0; i < values.length; i++)
if (random < values[i])
return i;
return values.length;
}
} /*201220*/

Histogram.java

public class Histogram
{
private int [] values;
private int minIndex;
private int maxIndex;
private int maxLength;

/** constructor for histogram drawing class
* @param values the array of integer values to draw
* @param minIndex the lowest index in the array for the range to draw
* @param maxIndex the highest index in the array for the range to draw
* @param maxLength the length of line to draw for the largest value
*/

public Histogram(int [] values, int minIndex, int maxIndex, int maxLength)
{
// initialize the values of the instance variables from the constructor parameters
this.values = new int [maxIndex + 1]; // allocate memory for a copy of the values array
this.minIndex = minIndex;
this.maxIndex = maxIndex;
this.maxLength = maxLength;

// step 6:
// find largest number in values array for scaling length of bars
for (int i =0; i < values.length; i++);
{
int maxValue= values.length;
}

// step 7:
// copy data from values array to this.values array while scaling to maximum length of bars

for (int i=0; i < values.length; i++)
{
float bars = (float)maxLength / (float)maxIndex;
}

}

/** draw a horizontal bar graph
*/

public void drawHor()
{
// step 8:
// draw horizontal bar graph (one line per roll value)

for(int i = 0; i < values.length; i++);
{
for(int j = 0; j < values[i]; j++);
{
values=System.out.println(" *");
}
}

}

/** draw a vertical bar graph
*/

public void drawVer()
{

// step 9:
// draw vertical bar graph (one column per roll value)

}
}/*201220*/```

6-9(Histogram.java)
6. and 7. We may have very large values in the values array supplied as a parameter. Since we want to limit the size of the histogram bar graph to maxLength, we need to scale the data in the values array when we copy it into the instance copy of the data in the array. This consists of two loops. The first loop finds the largest value in the values array. (Declare, initialize, and use a variable named something like “maxValue”). The second loop multiplies each value in the values array by the max length we want for bars (maxLength) and divides by the largest value found (“maxValue”). Remember the limitations of multiplication and division for integer variables. You may need to cast the integer values to double for the calculation and cast the result back to integer to update the value in each counts array element with good “resolution”. You can also get good resolution by performing integer multiplications and divisions in the correct order. See if you can do that as it will have better run time performance.

8. In the drawHor method, your code must draw a horizontal bar graph of the data in the values array. (See Sample Output) This will require two nested loops. The outer loop will be a scan through each element of the values array and the inner loop will print an asterisk from 1 through the value in the outer loop element of the values array. Print the values array integer at the end of each bar of asterisks.

9. In the drawVer method, your code must draw a vertical bar graph of the data in the values array. (See Sample Output) This is a little trickier than the horizontal bar graph. You still need two nested loops. The outer loop will count down through all the values from maxLength to 1 to print each line. The inner loop will print a piece of each line for each value (index into the values array). If the count for the value is greater than or equal to the decreasing count of the outer loop, print an asterisk with a space on either side of it. If the count for the value is not greater than or equal to the value of the outer loop count, print an equivalent number of spaces to maintain the column alignment but not show the “bar” in this column.
Last edited by xdrazkalnytex; 03-28-2012 at 02:08 AM. Reason: added code tags  Reply With Quote

2. ## Re: Already finished 1-5. Wondering if Someone can help with Steps 6-9. Please & Than

Do you have any specific questions or problems with the code you are trying to write?

Can you edit the code in your post and properly indent it?
Normally nested code is indented 3-4 spaces for every level of nesting within a pair of {}s.
This makes it easier to see the program logic.
Last edited by Norm; 03-28-2012 at 02:03 AM.  Reply With Quote

3. Member Join Date
Mar 2012
Posts
34
Rep Power
0

## Re: Already finished 1-5. Wondering if Someone can help with Steps 6-9. Please & Than

Yes, I need help with Steps 6-9.

Step 6 and 7 I have to do a pair of loops for maxValue and maxLength, but I don't know how to start or finish the loops. I try on it but wasn't sure if it is right or not.

and for Step 8 and 9. I do not know how to make a nested loops for the array to draw the verticle and horizontal bar graph.

Looking for someone to help me finish the program. Can you help me?  Reply With Quote

4. ## Re: Already finished 1-5. Wondering if Someone can help with Steps 6-9. Please & Than

What kind of loop are you trying to use? Post your code and explain what you want it to do.
Post any compiler errors you get also.  Reply With Quote

5. Member Join Date
Mar 2012
Posts
34
Rep Power
0

## Re: Already finished 1-5. Wondering if Someone can help with Steps 6-9. Please & Than

Step 6 and 7 require two loops according to the step lists.
the first loop is to find the largest value in the values array (Declare, initialize, and use a variable named something like “maxValue”). The second loop multiplies each value in the values array by the max length we want for bars (maxLength) and divides by the largest value found (“maxValue”)

I was thinking that this step reqiure me to use the for loop.

// step 6:
// find largest number in values array for scaling length of bars
for (int i =0; i < values.length; i++);
{
int maxValue= values.length;
}

// step 7:
// copy data from values array to this.values array while scaling to maximum length of bars

for (int i=0; i < values.length; i++)
{
float bars = (float)maxLength / (float)maxIndex;
}

}

/** draw a horizontal bar graph
*/

step 8 require me to do two nested loop. outer loop will be a scan through each element of the values array and the inner loop will print an asterisk from 1 through the value in the outer loop element of the values array. Print the values array integer at the end of each bar of asterisks. But i have no idea how to do it, i try it but not sure if it is right or not.
public void drawHor()
{
// step 8:
// draw horizontal bar graph (one line per roll value)

for(int i = 0; i < values.length; i++);
{
for(int j = 0; j < maxLength; j++);
{
System.out.println(" *");

}
}

}

/** draw a vertical bar graph
*/

public void drawVer()
{
step 9 require me to do two nested loop also. the outer loop will count down through all the values from maxLength to 1 to print each line. The inner loop will print a piece of each line for each value (index into the values array). If the count for the value is greater than or equal to the decreasing count of the outer loop, print an asterisk with a space on either side of it. If the count for the value is not greater than or equal to the value of the outer loop count, print an equivalent number of spaces to maintain the column alignment but not show the “bar” in this column.
// step 9:
// draw vertical bar graph (one column per roll value)

}

the errors i got is that i can't do array with double values which I am not sure why, So far that's how much I have gotten so far, and I have no idea how to finish it.  Reply With Quote

6. ## Re: Already finished 1-5. Wondering if Someone can help with Steps 6-9. Please & Than

If you get compiler errors, copy the full text and paste them here. Your edited version leaves off info.

You get an element in an array by using array notation: array[ix]

Take a look at the tutorial:
Arrays (The Java Tutorials > The Reflection API > Arrays and Enumerated Types)  Reply With Quote

7. Member Join Date
Mar 2012
Posts
34
Rep Power
0

## Re: Already finished 1-5. Wondering if Someone can help with Steps 6-9. Please & Than

public class Histogram
{
private int [] values;
private int minIndex;
private int maxIndex;
private int maxLength;

public Histogram(int [] values, int minIndex, int maxIndex, int maxLength)
{
// initialize the values of the instance variables from the constructor parameters
this.values = new int [maxIndex + 1]; // allocate memory for a copy of the values array
this.minIndex = minIndex;
this.maxIndex = maxIndex;
this.maxLength = maxLength;

// step 6:
// find largest number in values array for scaling length of bars
for (int i =0; i < values.length; i++);
{
int maxValue= values.length;
}

// step 7:
// copy data from values array to this.values array while scaling to maximum length of bars

for (int i=0; i < values.length; i++)
{
float bars = (float)maxLength / (float)maxIndex;
}

}

/** draw a horizontal bar graph
*/

public void drawHor()
{
// step 8:
// draw horizontal bar graph (one line per roll value)

for(int i = 0; i < values.length; i++);
{
for(int j = 0; j < maxLength; j++);
{
System.out.println(" *");

}
}

}

/** draw a vertical bar graph
*/

public void drawVer()
{

// step 9:
// draw vertical bar graph (one column per roll value)

}
}/*201220*/

******
// step 6:
// find largest number in values array for scaling length of bars

// step 7:
// copy data from values array to this.values array while scaling to maximum length of bars
********

I just compile this and I got no errors. Can you tell me if I am doing the for loop right or not in step 6 and 7? If I got it wrong can you correct it for me?  Reply With Quote

8. ## Re: Already finished 1-5. Wondering if Someone can help with Steps 6-9. Please & Than

am doing the for loop right
The test should be: Does the program generate the required output?  Reply With Quote

9. Member Join Date
Mar 2012
Posts
34
Rep Power
0

## Re: Already finished 1-5. Wondering if Someone can help with Steps 6-9. Please & Than

it supposed to link to Step 8 and 9 and make the histogram. But step 6 and 7 just find the values, which I don't know how to do  Reply With Quote

10. ## Re: Already finished 1-5. Wondering if Someone can help with Steps 6-9. Please & Than

Try doing one Step at a time.
What do you want to do for Step 6?  Reply With Quote

11. Member Join Date
Mar 2012
Posts
34
Rep Power
0

## Re: Already finished 1-5. Wondering if Someone can help with Steps 6-9. Please & Than

6. and 7. We may have very large values in the values array supplied as a parameter. Since we want to limit the size of the histogram bar graph to maxLength, we need to scale the data in the values array when we copy it into the instance copy of the data in the array. This consists of two loops. The first loop finds the largest value in the values array. (Declare, initialize, and use a variable named something like “maxValue”). The second loop multiplies each value in the values array by the max length we want for bars (maxLength) and divides by the largest value found (“maxValue”). Remember the limitations of multiplication and division for integer variables. You may need to cast the integer values to double for the calculation and cast the result back to integer to update the value in each counts array element with good “resolution”. You can also get good resolution by performing integer multiplications and divisions in the correct order. See if you can do that as it will have better run time performance.

Yeah. I am trying to get my loops to work for step 6 and 7 but i can't seem ti get it to work.
Step 6 require a for loop for largest value in the array.  Reply With Quote

12. ## Re: Already finished 1-5. Wondering if Someone can help with Steps 6-9. Please & Than

To find the largest element in an array:
Try using a for loop that loops for the number of elements in the array.
Use the loop index value to access each element in the array.
Compare each element in the array with another variable that holds the current max value using a if statement
If the current element is greater than the max value, save it as the max value
At the end of the loop the max value variable will hold the largest value found in the array.  Reply With Quote

13. Member Join Date
Mar 2012
Posts
34
Rep Power
0

## Re: Already finished 1-5. Wondering if Someone can help with Steps 6-9. Please & Than

I have no idea how to do that. Been trying on it for awhile now. Can you help me out?  Reply With Quote

14. ## Re: Already finished 1-5. Wondering if Someone can help with Steps 6-9. Please & Than

You know how to write a loop because I can see for loops in the code you posted.
What part of what I posted don't you understand?
Do you know how to get the contents of an array element? Here is a sample:
aVar = theArray[theIndexToArray]; // get the value of the array at theIndexToArray
Do you know how to write an if statement to compare two values to see which one is larger?
Do you know how to assign a value to a variable?  Reply With Quote

15. Member Join Date
Mar 2012
Posts
34
Rep Power
0

## Re: Already finished 1-5. Wondering if Someone can help with Steps 6-9. Please & Than

I know how to write the loop, the part I dont understand is what to put inside of the loop.

"Do you know how to write an if statement to compare two values to see which one is larger?
Do you know how to assign a value to a variable?"

I don't understand those.

for(int i=0; i < values.length; i++)
{
// I don't know what to put here
}  Reply With Quote

16. ## Re: Already finished 1-5. Wondering if Someone can help with Steps 6-9. Please & Than

Look at posts #12 & #14

Write some pseudo code describing the steps that need to be done in the loop to find the largest element in the array.

Doc on the if statement:
http://docs.oracle.com/javase/tutori...dbolts/if.html

Expressions:
http://docs.oracle.com/javase/tutori...pressions.html

how to assign a value to a variable
I don't believe that.
An assignment statement: x = 3; // assign 3 to x
Last edited by Norm; 03-28-2012 at 05:02 PM.  Reply With Quote

17. Member Join Date
Mar 2012
Posts
34
Rep Power
0

## Re: Already finished 1-5. Wondering if Someone can help with Steps 6-9. Please & Than

Doesn't really help at all. Thanks anyway, I'm going to continue to work on it  Reply With Quote

18. ## Re: Already finished 1-5. Wondering if Someone can help with Steps 6-9. Please & Than

If you can not write down the steps a program is supposed to do, you will not be able to write the code for the program.

There are thousands of examples of code with loops that look at the elements of an array.  Reply With Quote

19. Member Join Date
Mar 2012
Posts
34
Rep Power
0

## Re: Already finished 1-5. Wondering if Someone can help with Steps 6-9. Please & Than

To find the largest element in an array:
Try using a for loop that loops for the number of elements in the array.
Use the loop index value to access each element in the array.
Compare each element in the array with another variable that holds the current max value using a if statement
If the current element is greater than the max value, save it as the max value
At the end of the loop the max value variable will hold the largest value found in the array.

You replay that to me earlier,

quick questions, what is the loop index value?  Reply With Quote

20. ## Re: Already finished 1-5. Wondering if Someone can help with Steps 6-9. Please & Than

for(int i = 0; i < values.length; i++);
Here i is the loop indexing/control value.  Reply With Quote

#### Posting Permissions

• You may not post new threads
• You may not post replies
• You may not post attachments
• You may not edit your posts
•