2016-09-15 1 views
-1

ПОЖАЛУЙСТА, НЕ ОТВЕЧАЙТЕ КОД, СОДЕРЖАЩИЙ ОТВЕТ. Я ХОЧУ ПРИБЫТЬ НА КОДЕ СЕБЯ.C++: проверка массива для дубликатов с использованием значения, переданного в функцию

У меня есть задание, которое просит создать класс. Это включает в себя создание функции, которая проверяет текущие значения в массиве для дубликатов на основе значения, передаваемые в. Например,

bool set::contains(const value_type& target) const 

бы проверить, что цель находится в наборе и возвращает истину или ложь в зависимости от того, не существует. Эта функция затем будет заявлена ​​в функции вставки, которая вставляет целевое значение в набор. Проблема? Прибытие в код для поиска по массиву и проверка наличия целевого значения.

У меня есть следующие переменные для моего класса:

data[CAPACITY] //array to store the items, where CAPACITY 
       //is a const storing the maximum number of items in the array 
size_type used //how much of the array is used 

Я попытался следующий цикл, и он не работает:

bool set::contains(const value_type& target) const 
{ 
    for (int i = 0; i < used; i++) 
    { 
     if (target == data[i]) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
} 

Я полагал, что это будет работать, потому что кажется, что я итерируя через массив, просматривая, сколько из массива используется, а затем проверяя каждый индекс массива для целевого значения. Когда я тестирую этот код в своей основной функции, но печатное числовое значение всегда равно 0 или НЕТ.

Любые мысли? Я не могу отсортировать массив, как мы еще не узнали об этом.

+1

Вы всегда будете проверять только первое значение вашего массива. Понимаете, почему? –

+2

* ПОЖАЛУЙСТА, НЕ ОТВЕЧАЙТЕ КОД, СОДЕРЖАЩИЙ ОТВЕТ. Я ХОЧУ ПРИБЫТЬ НА КОДЕЛЕЙ MYSELF * - Тогда вы должны научиться использовать отладчик, который поставляется с вашим набором инструментов компилятора. Выполнение этого показало бы очевидную ошибку в вашем коде. – PaulMcKenzie

+0

@PaulMcKenzie Хороший звонок. Это умение, которое я должен действительно оттолкнуть. – FrakkinShip

ответ

2

Проблема в том, что вы возвращаете false внутри цикла. Таким образом, вы сразу же вернете false, если первый элемент в наборе не соответствует тому, который вы ищете. Вы должны подождать, пока вы закончите цикл - если вы еще не нашли элемент, который ищете, тогда его там нет, поэтому вы должны вернуть false.

bool set::contains(const value_type& target) const 
{ 
    for (int i = 0; i < used; i++) 
    { 
     if (target == data[i]) 
     { 
      return true; 
     } 
    } 
    return false; 
} 
+0

Спасибо, плохое редактирование с моей стороны – Barmar

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

  • Нет связанных вопросов^_^