使用java生成随机数直方图

时间:2009-11-18 20:52:12

标签: java histogram

直方图

--------------------------------------------------------
  1 ****(4)
  2 ******(6)
  3 ***********(11)
  4 *****************(17)
  5 **************************(26)
  6 *************************(25)
  7 *******(7)
  8 ***(3)
  9 (0)
 10 *(1)
--------------------------------------------------------

基本上就是我的程序需要做的事情..我在某处遗漏任何帮助会很棒的事情:)

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 | "); break;
            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]++;
            }
    }
   }
 }

5 个答案:

答案 0 :(得分:1)

你的随机数据包含80个值,但你只是在前10个迭代。你应该遍历所有80个。你可以使用histo [1],histo [2]等代替histo [i]。

此外,整个大开关块可以简化为

histo[randarray[i] / 10]++;

而不是创建randarray然后循环它,你可以简单地这样做:

for(int i = 0; i < 80; i++)
{
    histo[random.nextInt(100) / 10]++;
}

答案 1 :(得分:0)

如果我读得对,那么我认为你的switch陈述搞砸了。

您的randarray值来自0 < randarray[i] < 100,但您只为10提供的值switch。这可能会引发一些问题。

只是我的猜测。

答案 2 :(得分:0)

虽然你的数组中有80个随机数,但你只循环了10次。

这条线也有缺陷。您不希望使用相同的计数器变量来遍历数组并确定要增加的直方图区间。

 if (randarray[i] <= 10) {
                        histo[i] = histo[i] + 1;

<强>更新

您应该尝试提出一种算法将随机值转换为bin,因为您的解决方案不具备可扩展性,并且您将习惯于糟糕的编程习惯。

答案 3 :(得分:0)

你的最后一个for循环不会编译 - 那里有很多语法错误。

你需要用随机数字填充嘶嘶声,然后打印出来。

您希望在断开之前在每个case语句中打印hist数组中的计数。

如果你继续学习编程,祝你好运!

答案 4 :(得分:0)

要考虑的另一点是,您的直方图将是平坦,均匀的分布,而不是您在问题中显示的正态分布。