1

次のエラーが表示されます:

オブジェクト参照がオブジェクト インスタンスに設定されていません!

メソッドを呼び出す前に、オブジェクトが null かどうかを確認してください。

Sorted Linked Lists の小さなテスト プログラムを作成しました。エラーが発生するコードは次のとおりです。

    public void Insert(double data)
    {
        Link newLink = new Link(data);
        Link current = first;
        Link previous = null;

        if (first == null)
        {
            first = newLink;
        }
        
        else
        {
            while (data > current.DData && current != null)
            {
                previous = current;
                current = current.Next;
            }

            previous.Next = newLink;
            newLink.Next = current;
        }
    }

現在の参照は nullwhile (data > current.DData && current != null)であると書かれていますが、私はそれを割り当てました:current = first;

残りはプログラムの完全なコードです!

class Link
{
    double dData;
    Link next=null;

    public Link Next
    {
        get { return next; }
        set { next = value; }
    }

    public double DData
    {
        get { return dData; }
        set { dData = value; }
    }

    public Link(double dData)
    {
        this.dData = dData;
    }


    public void DisplayLink()
    { 
    Console.WriteLine("Link : "+ dData);
    }

}

class SortedList
{
    Link first;

    public SortedList()
    { 
        first = null;
    }

    public bool IsEmpty()
    {
        return (this.first == null);
    }

    public void Insert(double data)
    {
        Link newLink = new Link(data);
        Link current = first;
        Link previous = null;

        if (first == null)
        {
            first = newLink;
        }
        
        else
        {
            while (data > current.DData && current != null)
            {
                previous = current;
                current = current.Next;
            }

            previous.Next = newLink;
            newLink.Next = current;
        }
    }

    public Link Remove()
    {
        Link temp = first;
        first = first.Next;
        return temp;
    }

    public void DisplayList()
    {
        Link current;
        current = first;

        Console.WriteLine("Display the List!");
        
        while (current != null)
        {
            current.DisplayLink();
            current = current.Next;
        }
    }
}

class SortedListApp
{
    public void TestSortedList()
    {
        SortedList newList = new SortedList();
        newList.Insert(20);
        newList.Insert(22);
        newList.Insert(100);
        newList.Insert(1000);
        newList.Insert(15);
        newList.Insert(11);

        newList.DisplayList();
        newList.Remove();
        newList.DisplayList();

    }
}
4

2 に答える 2

1

行ったことに同意する

current = first; 

しかし、最初のクラスの先頭はnullです

class SortedList
{
    Link first;

何かをfirst他のものに割り当ててください。それはnullになります

于 2012-10-25T23:02:59.597 に答える
1

おそらく、最初の反復で while ループが壊れていると想定しているのですが、最終的にそれを壊したのは while ループの代入ではありません。

最終的に、コードに基づいて current は NULL になります。テストすることもできます - これに変更すると問題ありません。

while (current != null && data > current.DData)
{
    previous = current;
    current = current.Next;
}
于 2012-10-25T23:07:31.890 に答える