簡體   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