到目前为止,我遇到的问题是我的Enqueue
方法或我Dequeue
在 C# 中的方法运行不正确,并且它没有通过为分配创建的 UnitTest。
单元测试应该能够获取Enqueue
方法,并且Dequeue
方法和一次将一个 5 个字符的数组放入堆栈。
[]{10,20,30,40,50}
. 然后以相同的顺序(FIFO)取出它们。
我写的代码无法通过单元测试,报错说:
Assert.AreEqual 失败。预期<20>.实际<10>
public int Count { get; private set; }
private Node<T> _head = null;
private Node<T> _tail = null;
public void Enqueue(T data)
{
Node<T> node = new Node<T>();
node.Data = data;
if (Count == 0)
{
_tail = node;
_head = node;
_tail.Next = node;
}
else
{
node.Next = _tail;
_tail = node.Next;
}
}
我认为这段代码是我的问题,但我可能是错的。我一遍又一遍地尝试了这些变体,但没有成功,并且已经辞职,因为我的逻辑可能不正确或缺少一些非常愚蠢的东西。
public T Dequeue()
{
Node<T> position = _head;
if (Count == 0)
{
throw new InvalidOperationException("You've taken it all...");
}
else
{
T temp = _head.Data;
_head = position.Next;
--Count;
if (_head == null)
{
_tail = null;
}
return temp;
}
}
public void Reverse()
{
Node<T> previous, current, next;
previous = null;
current = _head;
next = _head.Next;
while (current != null)
{
next = current.Next;
current.Next = previous;
previous = current;
current = next;
}
_head = previous;
_tail = next;
}
public void EnqueueDequeueTest()
{
int[] testValues = new int[5] { 10, 20, 30, 40, 50 };
PG2Queue<int> testQueue = new PG2Queue<int>();
foreach (var testValue in testValues)
{
testQueue.Enqueue(testValue);
}
for (int i = 0; i < testValues.Length; i++)
{
int itemPopped = testQueue.Dequeue();
Assert.AreEqual(testValues[i], itemPopped);
}
}