gpt4 book ai didi

java - 初学Java(直方图)

转载 作者:行者123 更新时间:2023-11-30 06:39:14 28 4
gpt4 key购买 nike

我正在参加初级 Java 类(class),任务是创建一个具有以下输出的直方图程序:(100 和 10 是用户输入)。

有多少个数字? 100 间隔多少? 10

Histogram
--------------------------------------------------------
1 ****(4)
2 ******(6)
3 ***********(11)
4 *****************(17)
5 **************************(26)
6 *************************(25)
7 *******(7)
8 ***(3)
9 (0)
10 *(1)
--------------------------------------------------------

但是我的代码给出了以下输出,任何人都可以帮我指出哪里出了问题,非常感谢。

How Many Numbers? 10
How Many Intervals? 10

Histogram
--------------------------------------------------------
1 **********(10)
2 **********(10)
3 **********(10)
4 **********(10)
5 **********(10)
6 **********(10)
7 **********(10)
8 **********(10)
9 **********(10)
10 **********(10)

对于输入 100 和 10,我收到错误消息:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10 at Lab6.main(Lab6.java:44) I marked Line 44 below.

哪些链接到此代码;

             intervalValue[j]++;

我不确定如何附加生成器 (.jar) 文件,它应该只是为我们生成随机 #'s。再次感谢。

mport java.util.Scanner;

public class Lab6 {

public static void main(String[] args) {

int numbers, intervals;
double intervalWidth;

double max, mins, range;

Scanner keyboard = new Scanner(System.in);

System.out.print("How Many Numbers? ");

numbers = keyboard.nextInt();

System.out.print("How Many Intervals? ");

intervals = keyboard.nextInt();

double [] generate = new double[numbers];

generate = randomGenerator(numbers);

max = maximum(generate);

mins = minimum(generate);

range = max - mins;

intervalWidth = range / intervals;

int [] intervalValue = new int[intervals];

for (int i=0; i < generate.length; i++) {

for (int j = 0; j<generate.length; j++){
double imin = mins+j*intervalWidth;
double imax = max +j*(intervalWidth);
if(generate[i] >= imin && generate[i] < imax)
intervalValue[j]++; //LINE 44
}
}

System.out.println("Histogram");

System.out.println("--------------------------------" +
"------------------------");

for (int a=0; a < intervalValue.length; a++) {

System.out.print(" " + (a+1) + " ");

for (int b=0; b < intervalValue[a]; b++) {
System.out.print("*");
}

System.out.println("(" + intervalValue[a] + ")");
}
}

private static double [] randomGenerator(int number) {
double [] generate;

generate = Generator.getData(number);

return generate;
}

private static double maximum(double [] a) {

double max = a[0];

for (int i = 1; i < a.length; i++) {
if (a[i] > max) {
max = a[i];
}
}

return max;
}

private static double minimum(double [] a) {

double mins = a[0];

for (int i = 1; i < a.length; i++) {
if (a[i] < mins) {
mins = a[i];
}
}

return mins;
}
}

最佳答案

您需要删除第 43 行末尾的分号:

if(generate[i] >= imin && generate[i] < imax);

分号会使您的 if block 为空。因此,导致异常的行将无条件执行。

解决该问题后,这里有一些提示可帮助您开始进一步调试代码:


看看你的内循环的终止条件:

for (int j = 0; j<generate.length; j++)

您正在外循环中迭代生成的数字;因此您应该迭代内部循环中的间隔以确定每个生成的数字所属的间隔。


查看您用来确定循环中当前间隔范围的代码:

double imin = mins+j*intervalWidth;
double imax = max +j*(intervalWidth);

需要修改这些行以产生正确的值。进行一些“纸笔调试”以确定它们当前出错的原因。


我现在将剩下的留给读者作为练习。我稍后会回来查看您是否需要任何进一步的帮助。

关于java - 初学Java(直方图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1282204/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com