开发者

Generate random number histogram using java

开发者 https://www.devze.com 2022-12-11 16:14 出处:网络
Histogram -------------------------------------------------------- 1 ****(4) 2 ******(6) 3 ***********(11)

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消