Java 随机数检验(直方图)

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]; } }

我是Java编码的新手,我正在尝试使用以下方法创建直方图。这些注释是对我们每个方法的说明,我们稍后将使用它们创建一个主方法并打印一个直方图。我已经掌握了方法3,能够很好地编译所有内容,但我不确定我是否正确地编译了它们,我只知道它们正确地编译了方法4。我只是不知道如何处理方法5。 /* 方法1: 在数组中查找最大值 */

公共静态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();
        }
    }