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]
becourse[index]
在setClass
中吗?不要忘记接受答案,因为已经发布了一些好的答案。@AVD:请阅读作业标签wikishortclass[index]
becourse[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