Histogram
--------------------------------------------------------
1 ****(4)
2 ******(6)
3 ***********(11)
4 *****************(17)
5 **************************(26)
6 *************************(25)
7 *******(7)
8 ***(3)
9 (0)
10 *(1)
--------------------------------------------------------
basically above is what my prgram needs to do.. im missing something somewhere any help would be great :)
import java.util.Random;
public class Histogram
{
/*This is a program to generate random number histogram between
1 and 100 and generate a table */
public static void main(String args[])
{
int [] randarray = new int [80];
Random random = new Random();
System.out.println("Histogram");
System.out.println("---------");
int i ;
for ( i = 0; i<randarray.length;i++)
{
int temp = random.nextInt(100); //random numbers up to number value 100
randarray[i] = temp;
}
int [] histo = new int [10];
for ( i = 0; i<10; i++)
{
/* %03d\t, this generates the random numbers to
three decimal places so the numbers are generated
with a full number or number with 00's or one 0*/
if (randarray[i] <= 10) {
histo[i] = histo[i] + 1;
//System.out.println("*");
}
else if ( randarray[i] <= 20){
histo[i] = histo[i] + 1;
}
else if (randarray[i] <= 30){
histo[i] = histo[i] + 1;
}
else if ( randarray[i] <= 40){
histo[i] = histo[i] + 1;
}
else if (randarray[i] <= 50){
histo[i] = histo[i] + 1;
}
else if ( randarray[i] <=60){
histo[i] = histo[i] + 1;
}
else if ( randarray[i] <=70){
histo[i] = histo[i] + 1;
}
else if ( randarray[i] <=80){
histo[i] = histo[i] + 1;
}
else if ( randarray[i] <=90){
histo[i] = histo[i] + 1;
}
else if ( randarray[i] <=100){
histo[i] = histo[i] + 1;
}
switch (randarray[i])
{
case 1: System.out.print("0-10 | "); break;
case 2: System.out.print("11-20 | "); break;
case 3: System.out.print("21-30 | "); brea开发者_Python百科k;
case 4: System.out.print("31-40 | "); break;
case 5: System.out.print("41-50 | "); break;
case 6: System.out.print("51-60 | "); break;
case 7: System.out.print("61-70 | "); break;
case 8: System.out.print("71-80 | "); break;
case 9: System.out.print("81-90 | "); break;
case 10: System.out.print("91-100 | ");
}
for (int i = 0; i < 80; i++)
{
randomNumber = random.nextInt(100)
index = (randomNumber - 1) / 2;
histo[index]++;
}
}
}
}
Your random data contains 80 values but you are only iterating through the first 10. You should be iterating through all 80. You would use histo[1], histo[2], etc instead of histo[i].
Also, the whole big switch block could be simplified into
histo[randarray[i] / 10]++;
And instead of creating the randarray and then looping through it, you could simply do this:
for(int i = 0; i < 80; i++)
{
histo[random.nextInt(100) / 10]++;
}
You are only looping through 10 times, though you have 80 random numbers in your array.
This line is also flawed. You don't want to use the same counter variable for going through the array and determining which histogram bin to increment.
if (randarray[i] <= 10) {
histo[i] = histo[i] + 1;
UPDATE:
You should try to come up with an algorithm to turn a random value into a bin, as your solution isn't scalable, and you will be getting used to bad programming habits.
Your last for loop won't compile - there are a lot of syntax errors there.
You need to fill the hists with your random numbers, THEN print them out.
You want to print the counts in your hist array out in each case statement before you break as well.
Good luck if you continue to learn programming!
Another point to consider is that your histogram will be a flat, uniform distribution, not a normal distribution like you show in your question.
If I read that right, then I think your switch
statement is messed up.
Your randarray
values are from 0 < randarray[i] < 100
but you are only giving values up to 10
for your switch
. That would probably throw something off.
Just my guess.
精彩评论