指数超出界限?

时间:2018-06-03 20:16:27

标签: java arrays indexoutofboundsexception

 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的范围内

vertices =顶点列表[1-19], 数字是一个扁平的边数组

2 个答案:

答案 0 :(得分:0)

在行中:

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){

确保添加时不会越界。

答案 1 :(得分:0)

你的数组有长度,n = 19,意思是索引[0-18],i增加2。​​

所以当我= 18时,

 a.connected[i] = vertices[i+1];

尝试访问不存在的顶点[19]。因此ArrayOutOfBoundException。希望这会有所帮助。