Очень простой код для поиска номера дает мне бесконечный цикл - PullRequest
2 голосов
/ 22 мая 2010

Я новичок в школе информатики, и у меня возникли проблемы с небольшим фрагментом кода. По сути, мой код должен выполнять базовый поиск CLI в массиве целых чисел. Однако, что происходит, я получаю то, что кажется бесконечным циклом (BlueJ, компилятор, который я использую, застревает, и я должен перезагрузить компьютер). Я установил точки останова, но я все еще не понимаю проблему ... (Я даже не понимаю большинство вещей, которые мне это говорит)

Вот неправильный код (предположим, что «ArrayUtil» работает, потому что он работает):

import java.util.Scanner;
public class intSearch
{
   public static void main(String[] args)
   {
       search();
   }

   public static void search()
   {
       int[] randomArray = ArrayUtil.randomIntArray(20, 100);
       Scanner searchInput = new Scanner(System.in);
       int searchInt = searchInput.nextInt();
       if (findNumber(randomArray, searchInt) == -1)
       {
           System.out.println("Error");
       }else System.out.println("Searched Number: " + findNumber(randomArray, searchInt));
   }

   private static int findNumber(int[] searchedArray, int searchTerm)
   {
      for (int i = 0; searchedArray[i] == searchTerm && i < searchedArray.length; i++)
      {
          return i;
      }
      return -1;
   }
}

Это уже давно меня беспокоит ... пожалуйста, помогите мне определить проблему!

Ответы [ 3 ]

3 голосов
/ 22 мая 2010

Я не знаю о бесконечном цикле, но следующий код не будет работать так, как вы предполагали. i++ никогда не будет достигнут, поэтому i всегда будет иметь значение 0.

for (int i = 0; searchedArray[i] == searchTerm && i < searchedArray.length; i++)
{
    return i;
}
return -1;

Вы, вероятно, имеете в виду это:

for (int i = 0; i < searchedArray.length; i++)
{
    if (searchedArray[i] == searchTerm)
    {
        return i;
    }
}
return -1;
1 голос
/ 22 мая 2010

Я не знаю, что такое класс ArrayUtil (я не могу импортировать, используя мои Netbeans). Когда я пытаюсь изменить эту строку строкой int [] randomArray = {1, 2, 3, 5, 7, 10, 1, 5}; Работает отлично.

И вы должны изменить условие цикла. Я не скажу вам почему, но попробуйте использовать мой массив, и вы скоро увидите ошибку. После того, как вы это видите, вы можете это исправить:)

0 голосов
/ 09 мая 2013

Здесь есть 4 основных вопроса.
1. Установка searchedArray[i] == searchTerm перед i < searchedArray.length может привести к исключению за пределами допустимого диапазона. Вы должны всегда предотвращать такой код.
2. Ваше намерение кажется противоположностью вашего кода. Ваше имя метода подразумевает поиск поискового запроса. Но ваш код подразумевает, что вы хотите продолжить сканирование цикла до тех пор, пока не будет найден поисковый термин, хотя ваш цикл также не сделает этого. Думайте о «для (; это;) {что}» как «пока это делают».
3. Поместите точку останова в начале «поиска». Затем, с небольшим массивом, шаг за шагом проходите код по отладчику и наблюдайте за переменными. Они не лгут. Они скажут вам точно, что происходит.
4. Пожалуйста, используйте стандартную IDE и компилятор, такой как Eclipse и Sun JDK 6 или 7. Eclipse с JDK 7 - это серьезная комбинация, которая не имеет странного «бесконечного цикла», как вы описали выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...