我是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的功能不存在问题。
非常感谢您的帮助!