2016-12-04 7 views
-2

Планирование вокруг с помощью некоторых алгоритмов вычислительной разведки, новая область для меня.Arraylist.indexOf возвращает -1

По какой-то странной причине у меня возникают проблемы при поиске индекса определенного массива.

Так, например, у меня есть два массива, как parentOne, так и parentTwo типа Integer. Я добавляю 300 случайных целых значений для обоих списков массивов между 1 - 300.

Затем я пытаюсь получить значение из случайно выбранного индекса в массиве между 1-300, например, выберите город может = 129, код затем должен перейти к индексу 129 parentOne и вернуть соответствующее значение в этой позиции, однако он возвращает -1.

Своеобразный то, что это полностью работает при поиске любого индекса < 35.

Любая помощь будет высоко ценится!

спасибо.

private int[][] cycleCrossover(int first, int second){ 
    //tempArray to return 
    int[][] tempArray = new int[2][numberOfAreas]; 
    if(cycleCrossover == true){ 
     //select a random city 
     int selectedCity = 35;//random.nextInt(numberOfAreas); 
     int parentOneCity = 0; 
     int parentTwoIndex = 0; 
     int parentTwoCity = 0; 
     int parentOneIndex = 0; 
     int index = 0; 
     //used to store parent and exchange values as well as cycle 
     ArrayList<Integer> parentOne = new ArrayList<Integer>(); 
     ArrayList<Integer> parentTwo = new ArrayList<Integer>(); 
     ArrayList<Integer> cycle = new ArrayList<Integer>(); 

     //Assign values to the arrays 
     for(int i = 0; i <numberOfAreas; i++){ 
      parentOne.add(population[first][i]); 
      parentTwo.add(population[second][i]); 
     } 

     System.out.println(parentOne); 
     //get parentOne Cities into new array 
     long count = selectedCity; 
     //Determine my cycle contents 
     while(count > 0){ 
      //Get the index of the first city 
      index = parentOne.indexOf(selectedCity);   
      //Add the first cities index to my cycle 
      cycle.add(parentOne.indexOf(selectedCity)); 
      //add the next city to my parents cycle 
      selectedCity = parentTwo.get(index); 
      //take 1 from count 
      count = count - 1; 
     } 
} 
+1

'cycle.add (index)' выглядит чище ... В любом случае. По-видимому, 35 нет в списке или одно из других значений –

+0

Ошибка ясно, ваш список «parentOne» не имеет выбранного города. Вы уверены, что добавили его? Кстати, где определяется 'numberOfAreas'? –

+0

Трудно помочь, не зная содержание «населения». Пожалуйста, смотрите о [mcve] или выполните код с помощью отладчика –

ответ

1

Если indexOf метод ArrayList возвращает -1, это означает, что объект, который вы искомая внутри ArrayList не существует.

+0

Спасибо YWE, я нашел ошибку, потому что я генерировал случайные числа между 1-35, используя другую переменную, когда я генерирую число между 1 -300 поэтому индекс не смог найти какой-либо элемент> 35. Спасибо, ребята! – Coder1994UK

 Смежные вопросы

  • Нет связанных вопросов^_^