3

我正在尝试从来自另一个数组的数据开始定义一个数组。代码比千言万语更能说明情况。

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?

4

2 回答 2

1

您将两个数组分配给相同的 size table.getColumnCount(),然后再次对它们j使用indextable.getRowCount() - 1 ,最高为.

您可能应该将其中一个分配给 size table.getRowCount(),然后j仅用作那个的索引,而另一个用作索引i,但是您从不使用dailyClasses,所以我不确定。

编辑: 显然目的是用一列的数据填充两个数组。然后解决方法是将数组的大小更改为行数:

// Changed table.getColumnCount() -> table.getRowCount()
String [] dailyLessons= new String[table.getRowCount()];
String [] dailyClasses= new String[table.getRowCount()];
于 2013-09-15T15:13:25.213 回答
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而不是简单的数组,这样您就不必担心数组的大小。

于 2013-09-15T15:13:47.983 回答