Индекс выходит за границы? - PullRequest
0 голосов
/ 03 июня 2018
 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 голосов
/ 03 июня 2018

Ваш массив имеет длину, n = 19, что означает индекс [0-18], и i увеличивается на 2.

Поэтому, когда i = 18,

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

пытается получить доступвершины [19] которого не существует.Следовательно ArrayOutOfBoundException.Надеюсь, это поможет.

0 голосов
/ 03 июня 2018

В строке:

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

, чтобы убедиться, что оно не выйдет за пределы при добавлении.

...