数组运行时错误

时间:2012-10-06 04:42:28

标签: java arrays

我正在研究一个简单的学校程序,这是一个简单的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";
    }
}

有什么想法吗?

4 个答案:

答案 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)

你有没有在任何地方初始化变量类?

您已初始化所有大小类数组,但类似乎未初始化。