我有一个移动光标的列表,我需要得到我的值的总和。
我无法理解,为什么我得到了错误的结果总和。(调试后我看到错误的数字,这意味着我从方法getCursor()
返回的值是错误的)。通过方法DataType getCursor();
了解我的主要错误。
但我无法得到错误的地方。
请帮助解决问题。 这是我的代码:
ListADT.h
#include<iostream>
const int defMaxListSize = 10;
typedef int DataType;
class ListADT
{
private:
//Data members
int maxSize;
int size;
int cursor;
DataType *dataItems;
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):size(10)
{
dataItems = new DataType[size];
}
ListADT::~ListADT()
{
delete dataItems;
}
void ListADT::insert(const DataType & newDataItem)
{
if (size + 1 <= maxSize)
dataItems[++cursor] = newDataItem;
}
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())
{
return dataItems[cursor];
}
else
{
std::cout << "Empty list" << std::endl;
}
}
Source.cpp
#include <iostream>
#include "ListADT.h"
void main()
{
ListADT samples;
int newSample;
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();
std::cout << "CUR " << samples.getCursor() << std::endl;
do
total += samples.getCursor();
while (samples.gotoNext());
}
std::cout << "Sum is " << total << std::endl;
system("pause");
}
答案 0 :(得分:0)
一些建议:
- 使用调试器
- 初始化变量
- 使用std::vector<DataType>
代替数组DataType[size]
但也许主要问题在于这一行:
dataItems[++cursor] = newDataItem;
你应该使用后增量
dataItems[cursor++] = newDataItem;
您永远不会更新变量size