用java生成随机数直方图

用java生成随机数直方图,java,histogram,Java,Histogram,直方图 -------------------------------------------------------- 1 ****(4) 2 ******(6) 3 ***********(11) 4 *****************(17) 5 **************************(26) 6 *************************(25) 7 *******(7) 8 ***(3) 9 (0) 10 *(1) -----

直方图

--------------------------------------------------------
  1 ****(4)
  2 ******(6)
  3 ***********(11)
  4 *****************(17)
  5 **************************(26)
  6 *************************(25)
  7 *******(7)
  8 ***(3)
  9 (0)
 10 *(1)
--------------------------------------------------------
基本上以上就是我的程序需要做的。。我在某个地方错过了一些东西,任何帮助都会很好:)

import java.util.Random;
公共类直方图
{
/*这是一个生成随机数直方图的程序
1和100并生成一个表*/
公共静态void main(字符串参数[])
{
int[]随机数组=新int[80];
随机=新随机();
System.out.println(“直方图”);
System.out.println(“-----------”);
int i;

对于(i=0;i如果我读对了,那么我认为您的
开关
语句是错误的

您的
randary
值来自
0
,但您的
开关的
10
值可能会出错


这只是我的猜测。

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

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

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

if(randarray[i]您的随机数据包含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]++;
}
for(int i=0;i<80;i++)
{
histo[random.nextInt(100)/10]+;
}

您的last for循环无法编译-那里有很多语法错误

你需要用随机数字填写历史记录,然后打印出来

在中断之前,还需要在每个case语句中打印hist数组中的计数


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

< P>另一个要点是你的直方图将是平的,均匀的分布,不像你在你的问题中显示的正常分布。< / P>上面的代码是怎么产生的?这不是你所期望的吗?请详细说明你的程序是如何失败的。回到我的那天,我们必须走2米。我在雪地里写了很多次,只是为了找出我们的语法错误!根据我的经验,如果你写同样的东西(除了一个数字/数字)超过3次,那么你应该用
代替
。使用常量值而不是数字(例如
80
);当您在程序中更改某些内容时,它将对您有所帮助。嘿,达德,您能不能不给我一个示例的答案?我只上了两堂关于数组的课,一堂关于switch语句的课。干杯,谢谢您的好意,我非常想学习java。有什么我出错的地方吗?我把switch语句拿出来,我的程序是co这是最后一个“for”语句——你没有指定类型的变量。你需要把它们称为int。但我认为你的意思是在你将历史数组填入switch语句之前先填充它们。这就是我需要做的。我现在很迷茫,你可以说我只上了两节课你根本不需要switch语句。你可以用我发布的for循环替换整个程序,减去输出部分。我实际上在循环中有一个错误,我已经修复了,所以现在可能更有意义。你把变量搞混了。当你执行“histo[I]=histo[I]+1”时,它将不起作用,因为“I”是您生成的随机数。假设我是56,“histo[i]”将代表histo数组中的第56位。但是histo数组被定义为10位长!56超出范围。那么switch语句就是语法错误。我建议您用英语写出整个程序()在你继续之前。然后逐行检查,找出如何在代码中表示该行。这将帮助你清楚地理解你在做什么。
for(int i = 0; i < 80; i++)
{
    histo[random.nextInt(100) / 10]++;
}