索引超出范围异常:无效的索引0,大小为0

时间:2019-05-24 09:38:29

标签: java android arrays arraylist indexoutofboundsexception

所以我有一个android应用程序,经常被迫关闭。为什么在我的logcat上,以下方法经常会导致错误?

static void solveTSP(int[][] valuesMatrix) {
        shortestDistance = Integer.MAX_VALUE;
        longestDistance = Integer.MIN_VALUE;
        shortestPath = null;

        int totalPlaces = valuesMatrix.length;
        ArrayList<Integer> places = new ArrayList<>();
        for(int i=0; i<totalPlaces; i++){
            places.add(i);
        }
            int startPlace = places.get(0);// in logcat, this line is the  cause of the Index error Out of Bounds Exception: Invalid index 0, size is 0. How does that happen?

        int currentDistance = 0;
        bruteForceSearch(valuesMatrix, places, startPlace,   currentDistance);
}

3 个答案:

答案 0 :(得分:1)

如果valuesMatrix为空,则places的长度为0,内部没有值,因此尝试执行places.get(0)时出错。

答案 1 :(得分:1)

1)请尝试记录您的valuematrix长度,因为错误地明确提到valuesMatrix大小为零,因此您的地方列表也为空。因此,当您尝试获取第0个元素时,它将引发相同的异常。

2)另一件事是,您只将0到valuematrix长度存储在场所列表中,因此,startplace的值始终为零(0)。

答案 2 :(得分:1)

valuesMatrix 的长度定为0,该长度已分配给 totalPlaces 。 因此,“ for”循环不会运行,并且不会将任何内容添加到ArrayList “位置” 。 因此,当您尝试从其第零位置获取价值时,就会遇到异常。 检查 places 变量的大小,如果大于零,则仅继续执行以下语句:

for(int i=0; i<totalPlaces; i++){
        places.add(i);
    }
if (places.size() > 0) {
int startPlace = places.get(0);
}