我正在尝试从另一个数组的数据开始定义一个数组。 该代码将比数千字更好地解释情况。
public class QualityCheck {
public QualityCheck (JTable table)
{
//the data come from a JTable (that represents a school timetable)
String [] dailyLessons= new String[table.getColumnCount()];
String [] dailyClasses= new String[table.getColumnCount()];
//checking all the days
for (int i=1; i<table.getColumnCount(); i++)
{
//checking all the hours in a day
for (int j=0; j<table.getRowCount(); j++)
{
//lesson is an array that contains the subject and the room in which the subject is erogated
//lesson[0] contains the subject
//lesson[1] contains the room
String[] lesson = ((TabellaOrario.MyTableModel)table.getModel()).getLesson(j,i);
//I'd like to put ALL the daily subjects in dailyLesson
dailyLessons[j] = lesson[0];
//I'd like to put All the daily rooms in dailyClasses
dailyClasses[j] = lesson[1];
}
//trying if dailyLessons has the elements
for (String s: dailyLessons)
{
System.out.println(s);
}
}
}
}
如果运行此代码,编译器会发出此错误:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 7
它证明了字符串
dailyLessons[j] = lesson[0];
如何定义dailyLesson?
答案 0 :(得分:1)
您正在将两个数组分配到相同大小table.getColumnCount()
,
然后再次使用索引j
两者,最多可达table.getRowCount() - 1
。
您可能应该将其中一个分配到table.getRowCount()
大小,然后仅使用j
作为该索引的索引,而另一个使用i
,但不要使用{{ 1}}所以我不确定。
修改强> 显然,目的是用两列数据填充数组。然后修复是将数组的大小更改为行数:
dailyClasses
答案 1 :(得分:1)
使用table.getColumnCount()
初始化数组并使用j < table.getRowCount()
循环。
如果table.getColumnCount()
小于table.getRowCount()
,那么您将获得AIOBE。
至少需要使用table.getRowCount()
初始化数组。
修改强>
您可以使用封装dailyLessons
和dailyClasses
class Lesson {
public String dailyLesson;
public String dailyClass;
}
并创建该类的数组,这样您将始终拥有相同数量的每日课程和课程:
String [] lessons = new Lesson [table.getRowCount()];
以后在循环中:
lessons.dailyLesson = lesson[0];
lessons.dailyClass = lesson[1];
此外,您可以使用ArrayList而不是简单的数组,因此您不必担心数组的大小。