0

我是 Java 编码的新手,我正在尝试使用提供给我的以下方法创建直方图。注释是对我们每个方法的说明,我们稍后将使用它来创建主方法并打印直方图。我已经开始使用方法 3 并且能够编译一切正常但我不确定我是否做得对,我只知道他们正在正确编译到方法 4。我只是不知道该怎么做对于方法 5. /* 方法 1:在数组中查找最大值 */

public static int max(int[]arr){
    int maxValue = arr[0];
    for ( int i=1; i < arr.length; i++ ){
        if (arr[i] > maxValue){
            maxValue = arr[i];
        }
    }
    return maxValue;
}

/* 
Method 2:
Compute a random integer in the range [a..b)
*/

public static int randomInteger(int a, int b){;
    int randomNum;

    randomNum = a+(int)(Math.random() * ((b-a)+1));
    return randomNum;
}

/* 
Method 3:
Draw a Simple histogram of the array arr.
*/

public static void drawHistogram(int[] arr){
    for ( int i=0; i<arr.length; i++ ){
        System.out.print((i*10+1)+"-"+(i*10+10)+":"+"\t");

        for (int j=0; j<arr[i]; j++)
            System.out.print("*");

        System.out.println();
    }
}

/* 
Method 4:
Compute num random integers in the range [0..range) and put the frequency in arr[]
*/

public static void doSingleTest(int[] arr, int num, int range){
    for (int i=1; i<=num; i++){
        int random = randomInteger(0,range);
        arr[random]++;
    }
}

/* 
Method 5:
Compute num pairs of random integers in the range [0..range) and put the frequency in arr[]
*/

    public static void doPairsTesting(int[] arr, int  num, int range){

   }

public static void main(String[] args) {
    int test[] = new int[]{1,2,3,4,6,11,7};
    System.out.println("method1 = "+ max(test));
    System.out.println("method2 = "+randomInteger(1,20));
    drawHistogram(test);
    doSingleTest(test,1,5);
    System.out.println("method4 = "+Arrays.toString(test));

}
4

4 回答 4

1

这是错误的设计int random = int randomInteger(range);,我认为您需要阅读文档 abot java basics

我用下一种方式修复了method4:

public static void doSingleTest(int[] arr, int num, int range){
    for (int i=1; i<=num; i++){
        int random = randomInteger(0,range);
        arr[random]++;
    }
}

要测试您的方法,请使用下一个主要方法,它将结果打印到控制台,或者您可以在 IDE 中使用调试器:

public static void main(String[] args) {
    int test[] = new int[]{1,2,3,4,6,11,7};
    System.out.println("mathod1 = "+ max(test));
    System.out.println("mathod2 = "+randomInteger(1,20));
    drawHistogram(test);
    doSingleTest(test,1,5);
    System.out.println("mathod4 = "+Arrays.toString(test));

}

最后,您的方法 5 必须返回所需类型的值或为void

public static void doPairsTest(int[] arr, int num, int range){

}
于 2013-11-05T06:54:00.353 回答
0

对于计算随机整数,您可能需要考虑使用Random该类。这是一些文档:http ://docs.oracle.com/javase/6/docs/api/java/util/Random.html

您可以通过在类中声明一个 Random 对象来做到这一点,如下所示:

static Random randomGenerator = new Random();

然后在您的每个方法中,您可以使用randomGenerator.nextInt(n),其中 n 将是您希望包含随机数的范围的结尾。(不包括 n,从 0 开始)。

对于方法 4,您可能希望将返回类型设置为数组。然后您可以利用这个 randomGenerator,或者给定您当前的代码,您必须将两个参数传递给您的randomInteger方法。

对于方法 5,您可以简单地使用 doSingleTest 方法,然后在返回数组之前将数组的条目除以 2。这是有效的,因为如果您找到两个 3,您的 doSingleTest 在适当位置的频率将为 2。将其除以 2 即可得出对数。此外,您不必担心奇数,因为intJava 中的类型只会丢弃余数。

我也刚刚注意到您没有为方法 5 设置返回类型,所以继续将其设置为int[]

并使用一种public static void main(String[] args)方法来测试您的方法。

于 2013-11-05T07:00:55.340 回答
0
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();
        }
    }
于 2013-11-07T11:55:06.083 回答
0

对于方法5,您指的是dopairtest吗?如果是这样,这就是我解决这个问题的方法:

静态无效doPairsTest(int [] arr3,int num2,int range3){

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

正如你所看到的,我刚刚声明并分配了从我之前的方法中随机生成的值到 rand2 和 rand 3,然后我将它们中的两个相加,所以它们加起来是两位数。

你知道如何做直方图吗?我很困惑如何根据我们生成的数字和频率来绘制它。

于 2013-11-06T01:10:58.533 回答