当前位置: 首页 > 知识库问答 >
问题:

Java 中的 “java.lang.ArrayIndexOutOfBoundsException” 错误

拓拔麒
2023-03-14

我正在编写一个简单的Java代码,在输入第一个输入之后,我得到了这个错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at university.GetStudentSpect(university.java:26)
at university.main(university.java:11)

代码:

import java.util.Scanner;
public class university {
    public static Scanner Reader = new Scanner(System.in);
    public static int n;
    public static int m=0;
    public static int l;
    public static StringBuilder SConverter = new StringBuilder();
    public static void main(String[] args) {
        GetStudentsNumber();
        GetStudentSpect();
    }

    public static void GetStudentsNumber() {
        System.out.println("enter the number of students");
        n = Reader.nextInt();
    }
    public static String [][] StudentSpect = new String [n][2];

    public static void GetStudentSpect() {
        for (int i=0;i<n;i++) {
            System.out.println("enter the name of the student");
            StudentSpect[i][0] = SConverter.append(Reader.nextInt()).toString();
            System.out.println("enter the id of the student");
            StudentSpect[i][1] = SConverter.append(Reader.nextInt()).toString();
            System.out.println("enter the number of courses of the student");
            l = Reader.nextInt();
            m += l;
            StudentSpect[i][2] = SConverter.append(l).toString();
        }
    }
}

共有2个答案

慕容宇
2023-03-14

数组索引从0开始,给定大小2意味着它只能有位置0和1,而不是2。

 public static String [][] StudentSpect = new String [n][2];
```
And you are accessing array position of 2 over here.
```
 StudentSpect[i][2] = SConverter.append(l).toString();
```
So make this Change

公共静态String[][]Spect=new String[n][3];


扈阳辉
2023-03-14

静态代码在类首次加载时执行。这意味着,在运行main方法之前,您需要初始化StudentSpec。这反过来意味着n尚未赋值,因此它默认为0。因此,StudentSpec,是一个维度为0乘2的数组。(请注意,不管您是将代码与所有其他变量一起初始化<code>StudentSpec</code>还是在类中的更高版本,所有静态内容都将首先初始化。)

然后运行main中的代码,调用GetStudentsNumber,这将设置n,但不会初始化StudentSpec(再次)。然后运行GetStudentSpect,当您尝试访问StudentSpec时,程序就会崩溃,因为它是一个零元素数组。

要解决此问题,请在读取< code>n后初始化< code > getstudentnumber 中的< code>StudentSpec,即将代码从静态初始值设定项移到此方法中。

 类似资料: