首页 > 解决方案 > 需要为 Enqueue 和 Dequeue 方法生成语法,以便在 Visual Studio 中运行单元测试

问题描述

指令列表,以及我到目前为止的代码。

到目前为止,我遇到的问题是我的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);
    }
}

标签: c#enqueue

解决方案


推荐阅读