数组索引超出界限异常基本

时间:2018-01-18 04:03:00

标签: java

当我编译这个程序时它没有错误,但当我运行它时,我得到 Out of Bounds Error 。任何帮助?谢谢!

确切错误如下:

  

线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException:4       在javaapplication.JavaApplication.main(JavaApplication.java:32)   C:\ Users \ Juwon \ AppData \ Local \ NetBeans \ Cache \ 8.2 \ executor-snippets \ run.xml:53:Java返回:1   BUILD FAILED(总时间:0秒)

public class JavaApplication 
{
    public static void main(String[] args) 
    {
        int[] grades = new int[4];
        grades[0] = 77;
        grades[1] = 84;
        grades[2] = 80;
        grades[3] = 96;

        String[] Students = new String[] {"Tom", "Ed", "Joe", "Bob"};
        double sum = 0.0;

        System.out.print("#\tStudent\tGrade\n");
        System.out.print("-\t-------\t-----\n");

        int i = 0;
        for(;i<grades.length;i++);
        {
            System.out.printf("%d\t%s\t%d\n", i, Students[i], grades[i]);
            sum += grades[i];
        }
        double average = sum / grades.length;
        System.out.printf("Class Average %f\n", average);         
    }
}

3 个答案:

答案 0 :(得分:1)

for (; i < grades.length; i++);&lt; ---最后看到分号,基本上这是执行);之间的所有代码,这不是'{1}}很多,这意味着您实际上可以删除循环,只对代码产生轻微的副作用。

相反,你应该做更像......的事情。

for (int i = 0; i < grades.length; i++) {        
    System.out.println(i);
    System.out.printf("%d\t%s\t%d\n", i, Students[i], grades[i]);
    sum += grades[i];
}

注意,现在我可以在没有问题的循环定义中包含i

这不是一个不常见的问题,将来你可能会重复几次

答案 1 :(得分:0)

for(;i<grades.length;i++);

分号是麻烦制造者。 这导致您的变量i超过数组的最后一个索引。因此,越界异常!!

答案 2 :(得分:0)

正如Elliot所说,从你的for循环结束时删除分号,你的代码应该可以正常工作。在for循环中初始化计数器变量也是常见的做法。 for循环标题应该看起来像

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