2015-04-22 2 views
1

Я работаю над программой, которая получит пользовательский ввод, а затем сохранит его в массиве. Затем он будет искать массив, чтобы узнать, является ли введенный пользователем номер дублирующимся или нет. По какой-то причине binarySearch не обнаруживает дублирование.Двоичный поиск в массиве не работает

Мой код:

import java.util.Arrays; 
import java.util.Scanner; 

public class Duplicate_Elimination 
{ 
    public static void main(String[] args) 
    { 

    int [] numbers = new int[5]; // create an array 
    Scanner input = new Scanner(System.in); // create a Scanner 

     // Ask user for 5 numbers 
     for (int i = 0; i < 5; i++) 
     { 
      // ask user to type the number 
      System.out.printf("Please type number %d:",i+1); 
      int number = input.nextInt(); // get user input and store it in number variable 

      // check if the number entered is already stored 
      int location = Arrays.binarySearch(numbers,number); 

      // store the value inside number variable in numbers array 
      numbers[i] = number; 

      showArray(numbers); 

      // if there is any similarity between numbers, print error message 
      if (location >= 0) 
       System.out.printf("%s%n","error"); 
     } // end for 
    } 

    // this method will show what's in the array 
    public static void showArray(int[] numbers) 
    { 
     System.out.printf("%n%n"); // print black spaces 

     // print all the numbers stored in the array 
     for(int digit: numbers) 
     { 
      System.out.printf("%d",digit); 
     } 

     System.out.printf("%n"); // print black space 
    } 
} 

Я попытался меня зависящее, чтобы решить, но, когда я когда-либо типа 1, как и все мои числа, это только показывает дублирование после ввода как 3 номера. Он должен обнаруживать дублирование после каждой записи. Не могли бы вы помочь мне выяснить, что не так с моим кодом. Я буду очень благодарен.

Спасибо!

+4

бинарный поиск требует вашего массива sorted- не похож, что в случае – Sarang

+0

ли требование использовать массив двоичного поиска? – wvdz

+0

На самом деле я ничего не могу использовать. Но я не нашел ничего, чтобы использовать, поэтому я использовал Массивы. – Deep

ответ

3

От java.util.Arrays documentation:

открытые статические INT BinarySearch (ИНТ [] а, INT ключ)

Ищет указанный массив Интс для указанного значения, используя алгоритм двоичного поиска. Массив должен быть отсортирован по (по методу сортировки (int []) до совершения этого вызова. Если он не отсортирован, результаты не определены.

Так что вам нужно отсортировать массив после каждой установки.

+0

Спасибо за ваш ответ. Я не сортировал свой массив. Поэтому я исправлю это сейчас :) – Deep

0

Из того, что я вижу, я думаю, что вынимание сходства, комментируя это, должно работать.

showArray(numbers); 

     // if there is any similarity between numbers, print error message 
     //if (location >= 0) 
      //System.out.printf("%s%n","error"); 
    } // end for 
} 
Смежные вопросы