gpt4 book ai didi

java - Java 中的 "java.lang.ArrayIndexOutOfBoundsException"错误

转载 作者:行者123 更新时间:2023-12-02 10:12:04 25 4
gpt4 key购买 nike

我正在编写一个简单的 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();
}
}
}

最佳答案

静态代码在类首次加载时执行。这意味着,您需要在 main 方法运行之前初始化 StudentSpec。这反过来意味着 n 尚未分配值,因此它默认为 0。因此,StudentSpec 是一个维度为零乘二的数组。 (请注意,无论您是否将代码与所有其他变量一起初始化 StudentSpec ,还是稍后放在类中,所有静态内容都会首先初始化。)

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

要解决此问题,请在读取 n 后在 GetStudentsNumber 中初始化 StudentSpec,即将代码从静态初始化程序移动到此方法。

关于java - Java 中的 "java.lang.ArrayIndexOutOfBoundsException"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54946228/

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