繁体   English   中英

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

[英]java.lang.IndexOutOfBoundsException: Invalid index 5, size is 5

有时会出现此错误,有时会正常工作。 我真的不明白是什么问题。

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指向的行。 可能是什么问题?

增量变量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, " ");
        }
}

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

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

一些建议:

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

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

我还建议您不要将数组作为公共变量,而应该将它们设置为私有或受保护,并使用getter / setter来访问它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM