我正在研究一个简单的学校程序,这是一个简单的String构建器,我正确地定义了数组大小,但是当我运行程序时,ArrayIndexOutOfBoundsException: 0
被抛出。我初始化构造函数,名称和类中的变量。 name
是学生的姓名,classes
是学生每天上课的次数。我的数组大小是使用classes
定义的。这是我的构造函数和变量。
protected String name = "";
protected int classes;
private String schedule = "";
private String[] course = new String[classes];
private String[] room = new String[classes];
private int[] Period = new int[classes];
public StringBuilderHandler(String name, int classes) {
this.name = name;
this.classes = classes;
}
我正在使用for循环来设置String计划。
private void setClass(int index) {
Scanner scan = new Scanner(System.in);
class[index] = scan.nextLine();
}
private void setPeriod(int index) {
Scanner scan = new Scanner(System.in);
period[index] = scan.nextInt();
}
public void setRoom(int index) {
Scanner scan = new Scanner(System.in);
room[index] = scan.nextLine();
}
public void buildSchedule() {
for (int i = 0; i < classes; i++) {
System.out.println("What is your class?");
setClass(i);
System.out.println("What period is this class?");
setPeriod(i);
System.out.println("What room is this class?");
setRoom(i);
schedule = schedule +"Period "+period[i]+"\t"+course[i]+"\tRoom "+room[i]+"\n";
}
}
有什么想法吗?
答案 0 :(得分:3)
你必须必须在构造函数内创建对象(数组)。
private String[] course;
private String[] room;
private int[] Period;
public StringBuilderHandler(String name, int classes) {
this.name = name;
this.classes = classes;
this.course = new String[classes];
this.room = new String[classes];
this.Period = new int[classes];
}
答案 1 :(得分:2)
您的classes实例变量的默认值为0,因为您尚未初始化它。因此,所有数组都以零大小进行初始化。您将获得异常,因为没有索引0,因为数组的大小为零。您需要将类实例变量初始化为非零正值。
如果尝试向数组中插入的值多于其大小,则可能仍会得到ArrayIndexOutOfBoundsException。一个快速的解决方案是使用ArrayList而不是数组。
答案 2 :(得分:2)
您只需要将您的课程定义为:
protected String name = "";
protected int classes;
private String schedule = "";
private String[] course;
private String[] room;
private int[] Period;
public StringBuilderHandler(String name, int classes) {
this.name = name;
this.classes = classes;
this.course = new String[classes];
this.room = new String[classes];
this.Period = new int[classes];
}
确定它会起作用。您正在使用类变量而不初始化它,因为它在运行时初始化。当类有值时,您只需要在构造函数中初始化数组。
答案 3 :(得分:0)
你有没有在任何地方初始化变量类?
您已初始化所有大小类数组,但类似乎未初始化。