1

我正在为学校开发一个简单的程序,它是一个简单的字符串生成器,我正在正确定义数组大小,但是当我运行程序时,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 循环来设置字符串计划。

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

4 回答 4

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]; 
}
于 2012-10-06T04:49:04.770 回答
2

您的 classes 实例变量的默认值为 0,因为您尚未对其进行初始化。因此,您的所有数组都被初始化为零大小。由于数组大小为零,因此没有索引 0,因此出现异常。您需要将类实例变量初始化为非零正值。

如果您尝试向数组中插入比其大小更多的值,您仍然可能会收到 ArrayIndexOutOfBoundsException。一个快速的解决方案是使用 ArrayList 而不是数组。

于 2012-10-06T04:48:11.197 回答
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]; 
}

肯定会奏效的。您正在使用 classes 变量而没有对其进行初始化,因为它在运行时进行了初始化。当类有值时,您只需要在构造函数中初始化数组。

于 2012-10-06T05:00:55.803 回答
0

您是否在任何地方初始化了该变量类?

您已经初始化了所有大小类的数组,但类似乎没有被初始化。

于 2012-10-06T04:48:22.480 回答