从另一个数组定义数组

时间:2013-09-15 15:05:58

标签: java arrays

我正在尝试从另一个数组的数据开始定义一个数组。 该代码将比数千字更好地解释情况。

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?

2 个答案:

答案 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()初始化数组。

修改

您可以使用封装dailyLessonsdailyClasses

创建一个小类
class Lesson {
    public String dailyLesson;
    public String dailyClass;
}

并创建该类的数组,这样您将始终拥有相同数量的每日课程和课程:

String [] lessons = new Lesson [table.getRowCount()];

以后在循环中:

lessons.dailyLesson = lesson[0];
lessons.dailyClass = lesson[1];

此外,您可以使用ArrayList而不是简单的数组,因此您不必担心数组的大小。