簡體   English   中英

Java 數組索引越界錯誤

[英]Java Array Index out of Bounds Error

我正在研究旅行商問題的蠻力方法。 我有一行會產生ArrayIndexOutOfBounds異常,但是那里使用的所有數組都有足夠的空間。 特定的代碼行:

testCity[0][a] = cities[0][(int) cityList[a]];

這是我初始化testCity

int[][] testCity = new int[2][CITIES+10];

cities

public static int[][] cities = new int[2][CITIES+10];

最后, cityList

Object[] cityList = new Integer[CITIES+10];

這是整個錯誤消息:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at BruteF.permute(BruteF.java:39)
at BruteF.permute(BruteF.java:30)
at BruteF.permute(BruteF.java:30)
at BruteF.permute(BruteF.java:30)
at BruteF.main(BruteF.java:11)

這是代碼:

public class BruteF {
public static final int CITIES = 5;
public static int[][] cities = new int[2][CITIES+10];
public static int[][] bestCity = new int[2][CITIES+10];
public static double bestDistance = 1000;
public static int[][] testCity = new int[2][CITIES+10];
public static Object[] cityList = new Integer[CITIES+10];
public static void main(String[] args)
{
    permute(java.util.Arrays.asList(1,2,3,4), 0);
    for (int i = 0;i < CITIES;i++)
    {
        System.out.println(bestCity[0][i] + "," + bestCity[1][i]);
    }
}
static void permute(java.util.List<Integer> arr, int k){
    cities[0][0] = 1;
    cities[1][0] = 1;
    cities[0][1] = 2;
    cities[1][1] = 5;
    cities[0][2] = 3;
    cities[1][2] = 2;
    cities[0][3] = 4;
    cities[1][3] = 3;
    int originalX = cities[0][0];
    int originalY = cities[1][0];
    for(int i = k; i < arr.size(); i++){
        java.util.Collections.swap(arr, i, k);
        permute(arr, k+1);
        java.util.Collections.swap(arr, k, i);
    }
    if (k == arr.size() -1){
        for (int i = 0;i < CITIES;i++)
        {
            cityList = arr.toArray();
            for (int a = 0;a < CITIES;a++)
            {
                testCity[0][a] = cities[0][(int) cityList[a]];
            }
            if (distance(testCity,CITIES,originalX, originalY) < bestDistance)
            {
                bestCity = testCity;
                bestDistance = distance(testCity,CITIES, originalX, originalY);
            }
        }
    }
}
static double distance (int[][] cities, int CITIES, int originalX, int originalY)
{
    int[][] taken = new int[2][CITIES+1];
    int takenCounter = 0;
    double distance = 0;
    cities[0][CITIES] = cities[0][0];
    cities[1][CITIES] = cities[1][0];
    for (int i = 0;i <= CITIES;i++)
    {
        for (int z = 0;z <= CITIES;z++)
        {
            if (cities[0][i] == taken[0][z] && cities[1][i] == taken[1][z])
            {
                return CITIES*1000; //possible error here
            }
            else {
            taken[0][takenCounter] = cities[0][i];
            taken[1][takenCounter] = cities[1][i];
            }
        }
        if (cities[0][0] != originalX && cities[1][0] != originalY)
        {
        return CITIES*1000;                             //POSSIBLE BUG HERE
        }
        distance = distance + Math.sqrt(Math.pow(cities[0][i+1]-cities[0][i],2) + Math.pow(cities[1][i+1]-cities[1][i],2));
    }
    return distance;
}
}

為什么會發生這種情況? 我能做些什么來修復它?

它給出了越界異常:4
當你初始化 cityList ie cityList = arr.toArray(); 您的數組 cityList[] = {1,2,3,4} ,即從 0 到 3 的大小為 4。
你正在運行一個 for 循環,即

for (int a = 0;a < CITIES;a++)

從 a=0 到 CITIES ,所以當 a=4 時刻到來時,它會給出越界錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM