Vertex [] vertices = new Vertex[n];
int [] numbers = new int[n*2];
AdjacencyList[] all = new AdjacencyList [n+1];
for (Vertex v : vertices)
{
System.out.println(v.value);
AdjacencyList a = new AdjacencyList(v);
for (int i = 0; i < n; i += 2)
{
if (numbers[i] == v.value){
a.connected[i] = vertices[i+1];//array index out of bounds exception:19
else { a.connected[i] = v; }
}
all[0] = a; //add the finished adjacency list to the array
}
当n= 19时,我会在代码中指定的点得到一个索引越界错误吗?我不确定我错在哪里,因为一切都在19的范围内
顶点=顶点1-19的列表,数字是边的平面数组
发布于 2018-06-04 04:22:05
在这行中:
a.connected[i] = vertices[i+1];
您将该索引称为i+1
。这将产生一个index out of bounds exception
。(在您的示例中,当n
等于19时:有效索引将为0-18。你的循环将从0到18。但在行中,它会向其添加一个。18+1 = 19,这是一个无效的索引)在您的循环中将条件更改为:
for (int i = 0; i<n-1; i+=2){
以确保在添加一个时不会超出范围。
发布于 2018-06-04 04:25:06
数组的长度为n=19,表示索引为0-18,i递增2。
所以当i=18时,
a.connected[i] = vertices[i+1];
尝试访问不存在的vertices19。因此就有了ArrayOutOfBoundException。希望这能有所帮助。
https://stackoverflow.com/questions/50670594
复制相似问题