我正在尝试创建一个基于
输出直方图的程序该程序运行正常,除了我收到消息:
线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException:5 在test.Test.main(Test.java:32) /Users/[myname]/Library/Caches/NetBeans/8.2/executor-snippets/run.xml:53: Java返回:1 BUILD FAILED(总时间:7秒)
程序完成后。问题是什么?
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String star = "*";
int index = 1;
System.out.println("How many lines?");
int num = input.nextInt();
System.out.println("Your histogram will be "+ num +" lines");
int[] histogram = new int[num];
for (int i = 0; i < histogram.length; i++) {
System.out.println("Please write number " + index++);
histogram[i] = input.nextInt();
}
System.out.println("Here is your histogram: ");
for (int i = 0; 1 < histogram.length; i++) {
for (int j = 0; j < histogram[i]; j++)
System.out.print(star);
System.out.println();
}
System.exit(0);
}
}
答案 0 :(得分:2)
替换:
for (int i = 0; 1 < histogram.length; i++) {
由:
for (int i = 0; i < histogram.length; i++) {
否则,它将执行正确的次数(因为i
仍然递增,并且内循环循环直到i
)并且当它到达&#34; OutofBounds&#34;时崩溃。 ,但由于循环在程序的最后,它看起来像是正确执行。
答案 1 :(得分:0)
发生错误的原因是您实际上是1 < histogram.length
时写的i < histogram.length
。
如果您不知道我所指的位置,请点击此处:
System.out.println("Here is your histogram: ");
for (int i = 0; 1 < histogram.length; i++) { // <-- this line right here
for (int j = 0; j < histogram[i]; j++)
System.out.print(star);
System.out.println();
}
1 < histogram.length
导致循环永不结束。因此,在打印完所有直方图行后,i
递增并超出数组的大小。由于此时打印了您想要打印的所有内容,因此您可能会得到正确的输出。
基本上,程序会继续打印,直到出现异常或程序结束。异常的存在并不会使整个程序输出任何内容。