我是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));
}
答案 0 :(得分:1)
这是错误设计int random = int randomInteger(range);
我认为你需要阅读docs 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]++;
}
}
为了测试你的方法,使用next main方法,它将结果打印到控制台,或者你可以在IDE中使用Debugger:
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){
}
答案 1 :(得分: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会得到对的数量。此外,您不必担心奇数,因为Java中的int
类型只会丢弃余数。
我也注意到你没有为方法5设置返回类型,所以继续将其设置为int[]
并使用public static void main(String[] args)
方法测试您的方法。
答案 2 :(得分:0)
对于方法5,你指的是dopairtest?如果是这样,我就是这样解决的:
static void 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中,然后我添加了其中两个,以便它们加起来为两位数。
你有没有找到如何进行直方图?我很困惑如何基于我们生成的数字和频率来绘制它。
答案 3 :(得分: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();
}
}