java.lang.IndexOutOfBoundsException:索引5无效,大小为5

时间:2015-10-01 20:40:12

标签: java android

有时会出现此错误,有时可以正常运行。我真的无法理解问题所在。

int length = CitiesInfos.citiesOnTheRoad.length;
for (int i = 0; i < length; i++)
{
    HashMap<String,String> temp=new HashMap<String, String>();
    temp.put(FIRST_COLUMN, CitiesInfos.citiesOnTheRoad[i]);

    if (CitiesInfos.roadWorkArrayList.get(i)!=null)
    {
        temp.put(SECOND_COLUMN, CitiesInfos.weatherArrayList.get(i).getCelcius() + ", " +
                 CitiesInfos.weatherArrayList.get(i).getWeatherStatus());
    }
    else
    {
        temp.put(SECOND_COLUMN, " ");
    }
}

这是logCat指向的行。问题是什么?

2 个答案:

答案 0 :(得分:5)

增量变量i循环从0到citiesOnTheRoad.length - 1,但是,您还使用i作为另外两个ArrayList变量的索引:weatherArrayListroadWorkArrayList ,您如何确定它们的尺寸正确?

我添加了一张可以防止您收到的崩溃的检查,但我提醒您仔细查看您的代码,而不是将其放在上面。

    int length = CitiesInfos.citiesOnTheRoad.length;
    for (int i = 0; i < length; i++)
    {
        HashMap<String,String> temp=new HashMap<String, String>();
        temp.put(FIRST_COLUMN, CitiesInfos.citiesOnTheRoad[i]);
        if(i < CitiesInfos.roadWorkArrayList.size() 
            && i < CitiesInfos.weatherArrayList.size() 
            && CitiesInfos.roadWorkArrayList.get(i)!=null)
        {
            temp.put(SECOND_COLUMN, CitiesInfos.weatherArrayList.get(i).getCelcius() + ", " + CitiesInfos.weatherArrayList.get(i).getWeatherStatus());
        }
        else
        {
            temp.put(SECOND_COLUMN, " ");
        }
}

答案 1 :(得分:3)

正如James Wierzba所提到的,你在循环中对数组列表使用相同的控制变量,这就是你的问题。

在尝试检索元素之前,您需要确保有足够的项目。

一些建议:

似乎您将相关数据存储在两个数组中,您最好将这些数据分组到一个类中,例如市。

然后,您可以让道路阵列上的城市包含许多城市对象,每个城市对象都存储有关该城市天气的信息。

我还建议你不要把你的数组作为公共变量,你应该将它们作为私有或受保护,并使用getters / setter来访问它们。