Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数组运行时错误_Java_Arrays - Fatal编程技术网

Java 数组运行时错误

Java 数组运行时错误,java,arrays,Java,Arrays,我正在为学校编写一个简单的程序,它是一个简单的字符串生成器,我正确地定义了数组大小,但是当我运行该程序时,ArrayIndexOutOfBoundsException:0被抛出。我初始化构造函数、名称和类中的变量name是学生的名字,classes是学生每天上课的次数。数组的大小是使用类定义的。这是我的构造函数和变量 protected String name = ""; protected int classes; private String schedule = ""; private S

我正在为学校编写一个简单的程序,它是一个简单的字符串生成器,我正确地定义了数组大小,但是当我运行该程序时,
ArrayIndexOutOfBoundsException:0
被抛出。我初始化构造函数、名称和类中的变量
name
是学生的名字,
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";
    }
}
private void setClass(int索引){
扫描仪扫描=新扫描仪(System.in);
class[index]=scan.nextLine();
}
私有无效设置周期(整数索引){
扫描仪扫描=新扫描仪(System.in);
期间[索引]=scan.nextInt();
}
公共无效设置室(内部索引){
扫描仪扫描=新扫描仪(System.in);
房间[索引]=scan.nextLine();
}
公共建筑物一览表(){
for(int i=0;i

有什么想法吗?

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


如果尝试向数组中插入的值多于其大小,则仍然可能会出现ArrayIndexOutOfBoundsException。一个快速的解决方案是使用ArrayList而不是arrays

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


如果尝试向数组中插入的值多于其大小,则仍然可能会出现ArrayIndexOutOfBoundsException。一个快速的解决方案是使用ArrayList而不是arrays

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


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

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

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

必须在构造函数内创建对象(数组)

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]; 
}
必须在构造函数内创建对象(数组)

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]; 
}

您只需将类定义为:

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变量,但没有初始化它,因为它在运行时初始化。当类有值时,只需在构造函数中初始化数组

您只需将类定义为:

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变量,但没有初始化它,因为它在运行时初始化。当类有值时,只需在构造函数中初始化数组

不应该
class[index]
be
course[index]
setClass
中吗?不要忘记接受答案,因为已经发布了一些好的答案。@AVD:请阅读作业标签wikishort
class[index]
be
course[index]
setClass
中?不要忘记接受答案,因为已经发布了一些好的答案。@AVD:请阅读家庭作业标记wiki这使代码更干净了,但是如果将值0传递给构造函数作为classes参数,则仍有可能出现ArrayIndexOutOfBoundsException。理想的做法是使用ArrayList@bot同意当然,
阵列需要更多的关注。谢谢,我完全忘记了这一点,这有点尴尬@是的,但我的导师只允许我们使用特定的方法。即使你使用数组而不是数组列表,我觉得我的回答解释了为什么你要得到ArrayIndexOutOfBoundsException,这是你的问题,而不是你应该如何初始化数组。这使代码更干净,但如果我将值0传递给构造函数作为classes参数,仍然有可能出现ArrayIndexOutOfBoundsException。理想的做法是使用ArrayList@bot同意当然,
阵列需要更多的关注。谢谢,我完全忘记了这一点,这有点尴尬@是的,是的,但我的导师只允许我们使用特定的方法。即使你使用数组而不是ArrayList,我觉得我的回答解释了为什么你要得到ArrayIndexOutOfBoundsException,这是你的问题,而不是你应该如何初始化数组。这如何解决问题?如果我为classes参数向构造函数传递一个0值呢?更改代码结构不会隐式地使异常消失。这并不能回答问题。@bot你是对的。但是程序员解决了这个问题,因为他必须确保0不能传入方法。这些类型的问题由程序员处理。你没有抓住要点。我们的问题是它们的大小是固定的。不能在特定索引之外添加元素,否则将获得ArrayIndexOutOfBoundsException。然后,如何将更多元素添加到已满的数组中?您可以创建一个大小为其两倍的新数组并将其内容复制到此数组,或者只需使用ArrayList。我希望你能理解为什么你的答案不能解决问题。看我的答案。这是如何解决问题的?如果我为classes参数向构造函数传递一个0值呢?C