AVLTree插入项无限循环

时间:2017-02-16 15:28:27

标签: c# avl-tree

我的申请存在问题。

使用调试器我发现我的应用程序陷入无限循环。我附加了一个图像来演示当我尝试执行程序时发生的错误。

When executed

但是,在调试时我得出结论,这是我的CompareTo方法或我的AVLTree类中的InsertItem方法的问题。

该程序似乎围绕以下代码行循环 -

在我的Country班级 -

    public int CompareTo(object obj)
    {
        Country temp = (Country)obj;


        return name.CompareTo(temp.name);

    }

在我的AVLTree课程中(没有通过我附上的代码) -

  private void insertItem(T item, ref Node<T> tree)
        {
            if (tree == null)
            {
                tree = new Node<T>(item);
            }
            else if (item.CompareTo(tree.Data) < 0)
            {
                insertItem(item, ref tree.Left);
            }

我正在读取CSV文件中的数据,但是,当应用程序读入CSV文件中的第四个条目时会发生这种情况。

我可以插入以下国家 - 美国,加拿大,巴西,但智利(下一个记录)似乎遇到了这个问题。我想知道问题可能是什么?

我用这段代码插入这些数据:

avlTree.InsertItem(new Country(columns[0], float.Parse(columns[1]), float.Parse(columns[2]), float.Parse(columns[3]), Int32.Parse(columns[4]), tradingPartners));

我有循环让贸易伙伴和代码在文件中读取,似乎无法摆脱这个循环。这个问题在哪里?

我有以下课程 -

AVLTree
BSTree
BinTree
Country
Node
Form
Program

感谢您的时间。

更新 - 我Country方法的全部CompareTo课程 -

private string name;
private float GDP;
private float inflation;
private float tradeBal;
private int HDI;
public LinkedList<String> tradingPartners;
public string x;

public Country()
{

}
public Country(string name, float GDP, float inflation, float tradeBal, int HDI, LinkedList<String> tradingPartners)
{
    this.name = name;
    this.GDP = GDP;
    this.inflation = inflation;
    this.tradeBal = tradeBal;
    this.HDI = HDI;
    this.tradingPartners = tradingPartners;
}
public string CountryName
{
    get { return name; }
    set { name = value; }
}

public float GDPGrowth
{
    get { return GDP; }
    set { GDP = value; }
}

public float Inflation
{
    get { return inflation; }
    set { inflation = value; }
}

public float TradeBalance
{
    get { return tradeBal; }
    set { tradeBal = value; }
}

public int HDIRank
{
    get { return HDI; }
    set { HDI = value; }
}


public LinkedList<String> TradingPartners
    {
        get { return tradingPartners; }
        set { tradingPartners = value; }
    }




public int CompareTo(object obj)
{
    Country temp = (Country)obj;


    return name.CompareTo(temp.name);

}

public override string ToString()
{
    foreach (string y in TradingPartners)
    {
        x += y + ", ";
    }

    return name + ". " + GDP + ", " + inflation + ", " + tradeBal + ", " + HDI + "[ " + x + " ]";
}

我希望这会有所帮助,我不会像以前那样认为它是我的AVLTree而且没有出现任何问题。我忘记添加,代码会在我的CompareTo和我的insertItem方法之间不断循环播放(直到我将其粘贴到其中的位置,不会超出此范围)。

0 个答案:

没有答案