2013-04-09 4 views
1

Эта программа должна определить, найдено или нет целое число и сколько времени потребовалось, чтобы найти. Первый - это линейный поиск, а второй - двоичный поиск. У меня проблемы с этим. Линейный поиск работает, за исключением того, что я снова и снова получаю сообщение «Линейный поиск успешно». Я не уверен, почему бинарный поиск не выводит ничего честного. Любая помощь с благодарностьюДвоичный и линейный поиск

public class search { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    Scanner scanner1 = new Scanner(System.in); 
    System.out.println("Please enter in an integer:"); 
    int searchValue = scanner1.nextInt(); 

    int[] numbers = new int[1000]; 
    try { 
     Scanner scanner = new Scanner(new File("numbers.txt")); 
     for (int i = 0; i < 1000; i++) { 
      numbers[i] = scanner.nextInt(); 
     } 
    } catch (FileNotFoundException e) { 
     System.out 
       .println("A problem occurred reading the file numbers.txt"); 
     System.exit(0); 
    } 
    long time = System.nanoTime(); 
    int linear = linearSearch(numbers, searchValue); 
    long end = System.nanoTime(); 
    System.out.println(end - time); 
} 

public static int linearSearch(int[] numbers, int searchValue) { 
    for (int i = 0; i < numbers.length; i++) { 
     if (numbers[i] > searchValue) 
      return -1; 
     else if (numbers[i] == searchValue) 
      return i; 
     System.out.println("Linear search successful"); 

    } 

    return -1; 
} 

public int binarySearch(int searchValue, int[] numbers) { 
    long time = System.nanoTime(); 
    int low = 0; 
    int high = numbers.length - 1; 
    while (low <= high) { 
     int middle = low + (high - low)/2; 
     if (numbers[middle] == searchValue) { 
      System.out.println("Binary found"); 
      long end = System.nanoTime(); 
      System.out.println(end - time); 
     } 
     if (searchValue < numbers[middle]) 
      high = middle - 1; 
     else if (searchValue > numbers[middle]) 
      low = middle + 1; 
     else 
      return middle; 

    } 
    return -1; 
} 
} 
+0

'System.out.println (« Линейный поиск успешно »)' is _inside_ 'for' loop; поэтому вы видите, что это повторяется. – davmac

ответ

0

Это потому, что вы никогда не вызываете функцию binarySearch(). Вы звоните только linearSearch().

/* Call to linearSearch is here */ 
int linear = linearSearch(numbers, searchValue); 

/* No call to binarySearch to put here */ 
+0

Спасибо, теперь это работает. Это всегда что-то действительно очевидное, что я скучаю – user2120893

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