2017-02-01 1 views
0
ArrayBag foundBag; 
    int z; 
    z = getCurrentSize(); // tell you have many items exit in the bag 
    for (int i = 0; i < z; i++) 
    { 
     int cur = items[i]; //cur is use to hold each number in the vector and items is the first list of number. 
     bool found = false; // start as false so it doesnt trigger the true right away 
     for (int j = 0; j < foundBag.getCurrentSize(); j++) // this loop check the number currently inside cur agianst everything in the foundbag at the moment 
     { 
      if (foundBag.items[i] = cur) 

      { 
       found == true; // << it didnt detect that it have found the number. I think the problem is here 
      } 
     } 
     if (found == true) 
     { 
      // do nothing if found since number is already in the foundbag 
     } 
     else if (found != true) 
     { 
      foundBag.add(cur); // if number is not found in the foundBag add it to the found bag. 
     } 
    } 

Так что я пытаюсь сделать, это сравнить значение из существующего списка с новым пустым, которое в этом случае называется foundBag. Таким образом, в основном это предполагает получить ценность из первого мешка, а затем проверить, будет ли этот номер выхода в первом пакете или нет, тогда он добавит этот номер в найденный баг, если он его не найдет. Если он уже нашел номер, он ничего не сделает и перейдет к следующему элементу в первом пакете.C++ Сравнивая значение из 2-х разных списков, чтобы избавиться от дублированного числа, используя 2 для цикла. Не обнаруживает дубликат правильно

скажите, что в первом пакете есть номер 3 4 5 7 5 8 он должен добавить все от 3 4 5 7, затем ничего не делать, когда он добирается до второго 5, а затем добавить 8 к найденному багу. в конце foundBag должен содержать: 3 4 5 7 8

Проблема в том, что он, похоже, не правильно обнаруживает, что номер уже находится в найденном баге, поэтому он все добавляет. Я использовал функцию переходов в визуальной студии, чтобы посмотреть на каждый шаг, но я не мог понять, почему bool по-прежнему переходит к false, когда он нашел одинаковое число.

Я не очень силен в английском, так что если это не делает чувство, пожалуйста, попросите более подробного объяснения

Спасибо

ответ

1

Похоже, у вас есть = и == перепутаны.

 if (foundBag.items[j] == cur) // Use == here for comparison 
     { 
      found = true; // Use = here for assignment 
     } 

Кстати, если все, что вы делаете, ищет элемент в коллекции, предпочитают алгоритм из стандартной библиотеки:

auto result = std::count(std::begin(foundBag.items), std::end(foundBag.items), cur); 
if (result == std::end(foundBag.items)) { 
    // Not found; Add it 
    foundBag.add(cur); 
} 
+1

Вы также выглядеть, как вам нужно изменить индекс от 'i' до' j'. –

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