在表单中创建双链表时出错

时间:2016-02-29 15:44:02

标签: c#

我是C#的新手,我正在尝试创建一个循序渐进的程序,它将创建并显示双链表的节点。我将展示到目前为止我所拥有的:

这是表格的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Pruebapila2
{

    public partial class Form1 : Form
    {
        DbLinList infoTask;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            infoTask = new DbLinList();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            taskToDo vInfo = new taskToDo(int.Parse(textBox1.Text), textBox4.Text, textBox2.Text, textBox5.Text, textBox3.Text);
            infoTask.insertAtTheEnd(vInfo);
            listBox1.Items.Add("Data Added: "+ vInfo.id + " - " + vInfo.name + " - " + vInfo.length + " - " + vInfo.percentage + " - " + vInfo.programmer);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            Node n;

            n = infoTask.firstNode;
            while (n != null)
            {
                listBox1.Items.Add(Convert.ToString(n.info.id) + "\t" + n.info.name + "\t" + n.info.length);
                n = n.Next;
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            Node n;

            n = infoTask.firstNode;
            while (n != null)
            {
                if (n.info.id == int.Parse(textBox6.Text))
                listBox1.Items.Add(Convert.ToString(n.info.id) + "\t" + n.info.name + "\t" + n.info.length);
                n = n.Next;
            }
        }
    }
}

当您单击表单的第一个按钮时,它会将数据插入节点,该节点属于双链表,因此这里是list.cs的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Pruebapila2
{
    class DbLinList
    {
        public Node firstNode;

        public DbLinList()
        {
            firstNode = null;
        }

        public DbLinList insertAtTheEnd(taskToDo vTaskToDo)
        {
            Node newNode;
            newNode = new Node(vTaskToDo);
            newNode.Next = firstNode;
            newNode.Prev = firstNode.Next;
            firstNode = newNode;
            return this;
        }
    }
}

此列表使用一个节点,该节点具有前一节点的链接,以及指向列表下一个节点的链接。以下是节点的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Pruebapila2
{
    class Node
    {
        public taskToDo info;
        public Node Next;
        public Node Prev;

        public Node(taskToDo vInfo)
        {
            info = vInfo;
            Next = null;
            Prev = null;
        }
    }
}

节点是可重用的,因为它可以包含任何类型的信息,甚至包含几部分信息,但在这种情况下,此节点将包含有关程序员必须完成的任务的信息,因此我创建了一个任务。 cs文件,它将包含我们需要存储在列表中的信息。这是代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Pruebapila2
{
    class taskToDo
    {
            public int id;
            public string name;
            public string length;
            public string percentage;
            public string programmer;

            public taskToDo(int vID, String vName, String vLength, String vPercentage, String vProgrammer)
            {
                id = vID;
                name = vName;
                length = vLength;
                percentage = vPercentage;
                programmer = vProgrammer;
        }

    }
}

代码显示没有错误,没有警告,执行时,它显示错误:"未处理的类型' System.NullReferenceException'发生在DoubleLinkedTest.exe中。"但我不知道为什么会出现这个错误。

此处的逻辑如下:按钮将数据发送到列表,列表创建新节点,节点创建新任务,信息存储在节点中。

任何人都可以告诉我代码有什么问题,为什么不工作?目前,按钮编号2和3的功能不存在问题。

这就是表单的样子:Form Example

非常感谢您的帮助!

0 个答案:

没有答案