Двоичный поиск при обработке, ArrayIndexOutOfBounds

#search #binary #processing

#Поиск #двоичный #обработка

Вопрос:

В принципе, в целях пересмотра попытался закодировать алгоритм двоичного поиска в обработке. Решил использовать обработку для удобства. Кто-нибудь может обнаружить ошибку, потому что это сбивает меня с толку. Спасибо 🙂

 //Set size and font information.
size(400, 200);
background(0,0,0);
PFont font;
font = loadFont("Arial-Black-14.vlw"); 
textFont(font);

//Initialise the variables.
int[] intArray = new int[10];
int lower = 1;
int upper = 10;
int flag = 0;
int criteria = 10;
int element = 0;

//Populate the Array.
for(int i=0; i<10; i  )
{
  intArray[i] = i;
}

//Tell the user Array is filled.
text("Array Filled", 15, 20);

// Main loop.
while(flag == 0)
{
  //Sets the element to search by finding mid point.
  element = ((lower upper)/2);

  //Checks if the mid point is equal to search criteria.
  if(intArray[element] == criteria)
  {
    flag = 1;
  }
  //Checks if the criteria is grater than the currently searched element.
  else if(criteria > intArray[element])
  {
    lower = (element 1);
  }
  else
  {
    upper = (element-1);
  }

  //Checks if the lower value is higher than the upper value.
  if(lower > upper)
  {
    flag = 2;
  }
}

//If no match is found.
if(flag == 2)
{
  text("Did not find criteria " criteria, 15, 40); 
}
//If a match is found.
else
{
  text("Found " criteria " at index " element "", 15, 60); 
}
  

Ответ №1:

При инициализации lower и upper вы устанавливаете значения в 1 и 10, что неверно. 1 и 10 были бы наименьшими и наибольшими элементами, только если бы массив был основан на 1 (т. Е. Первый элемент равен 1), но это не так, он основан на 0. Установите значения 0 и 9, и это должно сработать.

Комментарии:

1. Кроме того, вы ищете 10, но десяти нет в массиве, а есть от 0 до 9. Код все равно должен работать, он просто вернет, что элемент не найден.

2. Не беспокойтесь! Легко допустить ошибку 🙂