Здравствуйте, подскажите , пожалуйста, ошибку. Не могу найти в чем проблема.
Имеется класс lisdtADT
, который содержит в себе maxSize
, size
и cursor
.
Для утверждения инициализирую maxSize=11
;` сразу, остальные переменные в конструкторе.
Проблема в том, что метод DataType getCursor();
*typedef int DataType;
возвращает неверное значение(мусор).
После дебаггинга, я понял, что newDataItem
в методе insert
инициализируется правильными введенными значениями.
Далее, в файле source.cpp
я пытаюсь подсчитать сумму моих введенных значений строкой total += samples.getCursor();
. И именно getCursor();
возвращает мне мусор, который конечно же неправильно считает сумму.
Я думаю, что я выхожу в каком-то месте прибавляю лишнюю еденицу и поэтому происходит такая ошибка.
Помогите,пожалуйста, разобраться.Спасибо.
Мой код:
ListADT.h
#include<iostream>
const int defMaxListSize = 10;
typedef int DataType;
class ListADT
{
private:
//Data members
int maxSize=11;
int size;
int cursor;
DataType *dataItems=NULL;
public:
//Constructor
ListADT(int maxNumber = defMaxListSize);
//Destructor
~ListADT();
//List manipulation operations
void insert(const DataType &newDataItem); //Insert after cursor
void remove(); //Remove Data item
//void replace(const DataType &newDataItem); //Replace data item
//List status operations
bool isEmpty()const; //List is empty
bool isFull() const; //List is full
//List iteration operations
void gotoBeginning() ; //Go to beginning
void gotoEnd(); //Go to end
bool gotoNext(); //Go to next data item
bool gotoPrior(); //Go to prior data item
DataType getCursor(); //Return data item
//Output the list structure -used in testinf/debugging
//void showStructure()const;
};
ListADT.cpp
#include "ListADT.h"
ListADT::ListADT(int maxNumber):cursor(0),size(0)
{
if (maxNumber <= defMaxListSize)
dataItems = new DataType[maxNumber];
else
std::cout << "The list is overloaded" << std::endl;
}
ListADT::~ListADT()
{
delete dataItems;
}
void ListADT::insert(const DataType & newDataItem)
{
if (size + 1 <= maxSize)
{
dataItems[cursor] = newDataItem;
size++;
cursor++;
}
}
void ListADT::remove()
{
if (size - 1 >= 0)
cursor--;
}
bool ListADT::isEmpty() const
{
if (size <= 0)
return true;
else
return false;
}
bool ListADT::isFull() const
{
if (size == defMaxListSize)
return true;
else
return false;
}
void ListADT::gotoBeginning()
{
cursor = 0;
}
void ListADT::gotoEnd()
{
cursor = size;
}
bool ListADT::gotoNext()
{
if (cursor < size)
{
cursor++;
return true;
}
return false;
}
bool ListADT::gotoPrior()
{
if (!isEmpty() && cursor != 1)
{
cursor--;
return true;
}
else return false;
}
DataType ListADT::getCursor()
{
if (!isEmpty())
{
//std::cout << "C: " << cursor << std::endl; //правильный результат
//cursor--;
return dataItems[cursor]; // возвращает мусор
}
else
{
std::cout << "Empty list" << std::endl;
}
}
Source.cpp
#include <iostream>
#include "ListADT.h"
void main()
{
ListADT samples;
int newSample=0;
int total = 0;
//Read in a set of samples from the keyboard.
std::cout << "Enter list of samples (end with eof): ";
for (int i = 0; i < 10; i++)
{
std::cin >> newSample;
samples.insert(newSample);
}
//Sum the samples and output the result.
if (!samples.isEmpty())
{
samples.gotoBeginning();
do {
std::cout << "CUR " << samples.getCursor() << std::endl;
total += samples.getCursor();
}
while (samples.gotoNext());
}
std::cout << "Sum is " << total << std::endl;
system("pause");
}
Результат:
Ошибка была найдена в методе bool ListADT::gotoNext()
. Происходил лишний шаг на единицу и поэтому десятый элемент возвращал мусор.
Метод insert()
остается без изменений:
void ListADT::insert(const DataType & newDataItem)
{
if (size + 1 <= maxSize)
{
dataItems[cursor] = newDataItem;
size++;
cursor++;
}
}
Метод bool ListADT::gotoNext()
. Меняем в условии size
на size-1
bool ListADT::gotoNext()
{
if (cursor < size-1)
{
cursor++;
return true;
}
return false;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Не могу нарисовать фигуру, которую создал в классеУ меня есть функция Main и класс Player
Василий в магазине и выбирает ровно два подаркаУ Василия есть K монет, а в магазине можно купить N типов подарков
Добрый деньМне необходим программный код параллельной сортировки Шелла, написанный на C++, с использованием MPI
Нужно изнутри std алгоритма получить текущий индекс в коллекции или итератор текущего элемента, то можно как-нибудь сделать? Например, в std::generate_n...