0

我目前正在使用/试验列表。我可以通过函数确定列表中每个项目的位置,GetNextTree例如:和。我已经从数组中创建了一个列表,但现在我正在尝试实现一个插入按钮,该按钮将获取值、、、并创建项目。由于我可以指向列表中的任何位置,因此插入的目的是在当前指向的项目之后添加一个项目。这就是我的问题所在:如何添加当前指向项目的新项目? FirstNextLastaxtree_typetree_heighttree_pricetree_instockafter

public class fruit_trees
{
    private string tree_type = " ";
    private int tree_height = 0;
    public double tree_price = 0;
    private int tree_instock = 0;


    public fruit_trees next_tree;

    public fruit_trees(string newtree, int newheight, double newprice, int newinstock)
    {
        tree_type = newtree;
        tree_height = newheight;
        tree_price = newprice;
        tree_instock = newinstock;


        next_tree = null;
    }

    public string GetTreeType
    {
        get { return tree_type;
            }
    }

    public override string ToString()
    {
        return tree_type + " " + tree_height + " " + tree_price + " " + tree_instock;

    }

}

public class ListForTrees
{
    private fruit_trees first_tree;
    public fruit_trees First_tree
    {
        get
        {
            return first_tree;
        }
    }

    public fruit_trees last_tree;
    public int current;
    public int count = 0;



    public ListForTrees(fruit_trees new_tree)
    {
        first_tree = new_tree;
        last_tree = new_tree;
        count = 1;
        current = 0;
    }

    public ListForTrees(IEnumerable trees)
    {
        current = 0;
        foreach (fruit_trees t in trees)
        {
            this.AddTree(t);
        }
    }

    public fruit_trees GetNextTree()
    {
        //current = 0;
        fruit_trees ft = first_tree;

        if (current == count)
        {

            current = 0;
        }

        int i = 0;
        while (i != current)
        {
            ft = ft.next_tree;
            i++;

        }

        return ft;
    }

}

ListForTrees mainlist = new ListForTrees();
private void BtnInsertTree_Click(object sender, EventArgs e)
{

    try
    {
        int height = Convert.ToInt32(TxtTreeHeight.Text);
        int stock = Convert.ToInt32(TxtTreeStock.Text);
        double price = Convert.ToDouble(TxtTreePrice.Text);

        fruit_trees treeadd = new fruit_trees(TxtTreeName.Text, height, price, stock);
        mainlist.AddTree(treeadd);

    }
    catch
{
    MessageBox.Show("Please check intput fields");
    }
}

private void BtnGo_Click(object sender, EventArgs e)
{
    fruit_trees[] ax = {   new fruit_trees("cherry", 48, 12.95, 3),
                           new fruit_trees("pine", 36, 9.95, 8),
                           new fruit_trees("oak", 60, 14.95, 2),
                           new fruit_trees("peach", 54, 19.95, 3),
                           new fruit_trees("pear", 36, 11.85, 2),
                           new fruit_trees("apple", 62, 13.45, 5)
                       };

    mainlist = new ListForTrees(ax);
    fruit_trees current = mainlist.First_tree;
    while (current != null)
    {
        TxtOutput.AppendText(current.ToString() + Environment.NewLine);
        current = current.next_tree;
    }

}

private void ShowFirstItem_Click(object sender, EventArgs e)
{
    //Show Next Item
    labelSpecificTree.Text = mainlist.First_tree.GetTreeType;
}

private void ShowNextItem_Click(object sender, EventArgs e)
{

    fruit_trees obj = mainlist.GetNextTree();
    if (obj.next_tree == null)
    {
        labelSpecificTree.Text = mainlist.First_tree.GetTreeType.ToString();
    }
    else
    {
        mainlist.current++;
        labelSpecificTree.Text = obj.next_tree.GetTreeType.ToString();
    }

}

private void ShowLastItem_Click(object sender, EventArgs e)
{
    // Show First Item
    labelSpecificTree.Text = mainlist.last_tree.GetTreeType;

}
4

1 回答 1

0

所以我对这里发生的事情有点困惑。你正在实现你自己的ArrayList类,这根本不是一个真正的列表......我真的不明白在 C# 中做这些事情的意义,但是好吧......这是方法;

  fruit_trees[] InsertNode(fruit_trees current, fruit_trees nNode)
  {
       fruit_trees[] temp = new fruit_trees[ax.Length + 1];
       int i = 0;

       while (ax[i] != current)
       {
             temp[i] = ax[i];
             i++;
       }
       temp[i+1] = nNode;
       while (i < ax.Length)
       {
            temp[i+1] = ax[i];
       }

       return temp; 
  }

这样称呼它;

  ax = InsertNode(current, nNode);

我们正在做的是创建一个带有一个额外插槽的新列表,将每个列表复制fruit_tree到我们要插入的节点,然后我们将新树复制进去。之后我们复制旧数组的其余部分。然后我们返回新数组。

于 2012-12-15T03:40:43.427 回答