2017-02-18 3 views
2

Довольно много нового, и я исчерпал множество попыток выяснить, почему это не работает, но не может его получить.Обнаружение дубликатов в массиве

private int indexOf(int searchingNum) 
{ 
    int x = searchingNum; 
    for (int i = 0; i<numberArray.length; i++){ 
     if (numberArray[i]==x) 
      index = i; 
     else 
      index = -1; 
    } 
    return index; 
} 

public boolean addNumber(int numberToAdd) 
{ 
    int x = numberToAdd; 
    if (indexOf(x)!=-1) 
     return false; 
    if (count<numberArray.length&&indexOf(x)==-1){ 
     count++; 
     numberArray[count-1] = x; 
     return true; 
    } 

    if (count>=numberArray.length&&indexOf(x)==-1){ 
     count++; 
     newArray = Arrays.copyOf(numberArray, 2* numberArray.length); 
     numberArray = newArray; 
     numberArray[count-1] = x; 
    } 
    return true;  
} 

Метод должен допускать дубликаты, но делает. Любые указатели в правильном направлении были бы высоко оценены.

Спасибо.

+0

Если вы хотите избежать дубликатов, попробуйте использовать 'Set' вместо массива. –

ответ

2

Ваш indexOf неверен: поскольку вы продолжаете цикл после поиска соответствия, ваш код возвращает -1, если последний элемент в массиве не соответствует.

Чтобы устранить эту проблему, вернуть i внутри цикла:

for (int i = 0 ; i < numberArray.length ; i++) { 
    if (numberArray[i]==x) 
     return i; 
} 
// If we are here, we did not find anything; return -1 
return -1; 
+0

Не могу поверить, что я этого не видел! Спасибо! Проблема решена. –

1

Вот точная версия кода:

private boolean contains(int searchingNum) 
{ 
    for (int i = 0; i<numberArray.length; i++){ 
     if (numberArray[i]==x) 
      return true; 
    } 
    return false; 
} 

public boolean addNumber(int numberToAdd) 
{ 
    int x = numberToAdd; 
    if (contains(x)) 
     return false; 
    if (count<numberArray.length){ 
     count++; 
     numberArray[count-1] = x; 
} 
    else{ 
     count++; 
     int []newArray = Arrays.copyOf(numberArray, 2* numberArray.length); 
     numberArray = newArray; 
     numberArray[count-1] = x; 
    } 
    return true;  
} 

Попробуйте это. Между тем, это может только гарантировать вам уникальность элементов, если массив ранее не был инициализирован, т. Е. Все элементы добавляются в массив только с использованием этого метода.

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