Java.lang.ArrayIndexOutOfBoundsException - 但程序仍然正确执行?

时间:2017-03-15 13:58:07

标签: java arrays

我正在尝试创建一个基于

输出直方图的程序
  • 关于直方图应该是多少行的用户输入,以及
  • 实际数字(也是用户输入)

该程序运行正常,除了我收到消息:

  

线程中的异常" 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);

    }
}

2 个答案:

答案 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递增并超出数组的大小。由于此时打印了您想要打印的所有内容,因此您可能会得到正确的输出。

基本上,程序会继续打印,直到出现异常或程序结束。异常的存在并不会使整个程序输出任何内容。