Java 随机数检验(直方图)
我是Java编码的新手,我正在尝试使用以下方法创建直方图。这些注释是对我们每个方法的说明,我们稍后将使用它们创建一个主方法并打印一个直方图。我已经掌握了方法3,能够很好地编译所有内容,但我不确定我是否正确地编译了它们,我只知道它们正确地编译了方法4。我只是不知道如何处理方法5。 /* 方法1: 在数组中查找最大值 */Java 随机数检验(直方图),java,methods,random,compiler-errors,histogram,Java,Methods,Random,Compiler Errors,Histogram,我是Java编码的新手,我正在尝试使用以下方法创建直方图。这些注释是对我们每个方法的说明,我们稍后将使用它们创建一个主方法并打印一个直方图。我已经掌握了方法3,能够很好地编译所有内容,但我不确定我是否正确地编译了它们,我只知道它们正确地编译了方法4。我只是不知道如何处理方法5。 /* 方法1: 在数组中查找最大值 */ 公共静态int max(int[]arr){ int maxValue=arr[0]; 对于(int i=1;imaxValue){ maxValue=arr[i]; } }
公共静态int max(int[]arr){
int maxValue=arr[0];
对于(int i=1;imaxValue){
maxValue=arr[i];
}
}
返回最大值;
}
/*
方法2:
计算[a..b]范围内的随机整数
*/
公共静态整数随机整数(整数a,整数b){;
int随机数;
randomNum=a+(int)(Math.random()*((b-a)+1));
返回随机数;
}
/*
方法3:
绘制数组arr的简单直方图。
*/
公共静态无效直方图(int[]arr){
对于(inti=0;i这是错误的设计intrandom=intrandomInteger(range);
我想你需要阅读
我用下一种方法修正了方法4:
public static void doSingleTest(int[] arr, int num, int range){
for (int i=1; i<=num; i++){
int random = randomInteger(0,range);
arr[random]++;
}
}
最后,您的方法5必须返回所需类型的值,或者是void:
public static void doPairsTest(int[] arr, int num, int range){
}
< P>计算随机整数时,您可能需要考虑使用<代码>随机类。这里有一些文档:
可以通过如下方式在类中声明一个随机对象来实现:
static Random randomGenerator = new Random();
然后在每个方法中,您可以使用randomGenerator.nextInt(n)
,其中n将是您希望包含随机数的范围的末尾。(不包括n,从0开始)
对于方法4,您可能希望将返回类型设置为数组。然后您可以利用此randomGenerator,或者给定当前代码,您必须将两个参数传递给randomInteger
方法
对于方法5,您可以简单地使用doSingleTest方法,然后在返回数组之前将数组的条目除以2。这是有效的,因为如果您找到两个3,doSingleTest在适当位置的频率将为2。将此除以2将得到对数。此外,您不必担心奇数n因为Java中的int
类型只会删除余数
我还注意到您没有为方法5设置返回类型,所以请继续将其设置为int[]
并使用一个公共静态void main(String[]args)
方法来测试您的方法。对于方法5,您是指dopairtest吗?在这种情况下,我是如何解决的:
静态空隙率测试(int[]arr3,int num2,int range3){
for(int i=0;i
正如你所看到的,我刚刚声明并将以前方法中随机生成的值分配到rand2和rand3中,然后我将它们相加,使它们相加为两位数
你知道如何绘制直方图了吗?我对如何根据我们生成的数字和频率绘制直方图感到非常困惑。public static void drawHistogram(int[]arr){
public static void drawHistogram(int[] arr){
int n=0;
for (int i=1;i<=99;i++)
if (arr[i]>n)
n=arr[i];
for (;n>0;n--)
{
String r=" ";
for (int i=0;i<=99;i++)
if (n<=arr[i])
{
System.out.print(r+"*");
r=" ";
}
else
r+=" ";
System.out.println();
}
}
int n=0;
对于(int i=1;in)
n=arr[i];
对于(;n>0;n--)
{
字符串r=“”;
对于(int i=0;我非常感谢您对方法4的帮助。是的,我确实需要阅读更多的基础知识,但我迷路了,甚至无法理解这本书。我想向有解释的人学习会更容易。另外,我在主方法:RandomNum.java:80:error:not find symbol System.out.println上遇到一个错误(“mathod4=“+Arrays.toString(测试))^symbol:variable Arrays location:class RandomNum 1错误处理javac已退出,代码为1I我想您需要为类的导入添加下一行代码:import java.util.Arrays;
我刚刚更新了代码,现在有了一个工作方法4。我只是不知道如何处理方法5,甚至如何启动它。另外,我在上一条语句的主方法上遇到了一个错误。
static Random randomGenerator = new Random();
for (int i = 0 ; i < num2 ; i++) {
int rand2 = randomInteger(0, range3);
int rand3 = randomInteger(0, range3);
int randomPair = (rand2 * 10) + rand3 ;
System.out.println(randomPair);
arr3[randomPair] ++ ;
}
}
public static void drawHistogram(int[] arr){
int n=0;
for (int i=1;i<=99;i++)
if (arr[i]>n)
n=arr[i];
for (;n>0;n--)
{
String r=" ";
for (int i=0;i<=99;i++)
if (n<=arr[i])
{
System.out.print(r+"*");
r=" ";
}
else
r+=" ";
System.out.println();
}
}