2

我正在处理列表。我已经能够确定列表中项目的第一个和最后一个位置。我正在getPostion通过Label. 我的表单中的三个按钮:(ShowFirstItem ShowNextItem不起作用)并ShowLastItem在标签中显示相应的项目。我的下一个项目有问题。我没有持有当前fruit_tree. 所以我不确定如何添加一个int成员或另一个fruit_tree名为current. 我怎样才能找到下一个(第一个之后的项目)并显示结果?

 public class ListForTrees
 {

        public fruit_trees GetNextTree()
            {
                current = 0;
                fruit_trees ft = first_tree;
                int i = 0;
                while (i != current)
                {
                    ft = ft.next_tree;
                    i++;

                }

                return ft;
            }

            }

            ListForTrees mainlist = new ListForTrees();     

            private void BtnGo_Click(object sender, EventArgs e)
            {
                fruit_trees[] ar_items = {   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(ar_items);
                fruit_trees current = mainlist.first_tree;   

                while (current != null)
                {
                    TxtOutput.AppendText(current.ToString() + Environment.NewLine);
                    current = current.next_tree;
                }
            }


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

            } 

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

        private void ShowNextItem_Click(object sender, EventArgs e)
            {
            //Show Next Item
 fruit_trees obj = mainlist.GetNextTree();

            if (obj == null)
            {
                labelSpecificTree.Text = "No more trees!";
            }
            else
            {
                mainlist.current++;
                labelSpecificTree.Text = obj.next_tree.GetTreeType.ToString();                
            }   
            }



        }
4

2 回答 2

2

我不确定这是否能解决您的问题,但您可以添加

public fruit_trees current_tree;

课堂上的领域ListForTrees

然后,您可以轻松添加显示下一个并将项目指针移动到列表中的下一个项目的方法。记住当前项目可以避免每次想要列表中的下一棵树时浏览整个列表。代码可能如下所示:

public fruit_trees GetNextTree()
{
    //save currently pointed tree
    fruit_trees tree = this.current_tree;
    if (tree != null)
    {
        //move current_tree to the next tree, to be returned next time
        current_tree = current_tree.next_tree;
        //return saved tree object
    }
    return tree;
}

为了使其工作,您还应该记住在current_tree添加到列表中的第一棵树时启动 的值。您还可以编写某种ResetNextTreePointer()方法将其指向列表中的第一棵树。

对代码的更多建议:

  • 我想在你的类中使用属​​性会更好,所以改变

    public fruit_trees first_tree;
    

    进入

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

    因为它会禁用你的类之外的任何类来显式地修改这些字段。

  • 这段代码:

    if (count == 0)
    {
        ...
    }
    else if (count != 0)
    {
        ...
    }
    

    可以改成:

    if (count == 0)
    {
        ...
    }
    else
    {
        ...
    }
    
于 2012-12-13T21:23:05.420 回答
1

我会补充

public int current; 

到树列表。在构造函数中将其设置为 0;

然后创建一个返回当前fruit_trees对象的方法

public fruit_trees getCurrent()
{
    fruit_trees ft = first_tree;
    int i = 0;   
    while(i != current)
    {
       ft = ft.next_tree;
       i++;
    }
    return ft;
 }

现在这个方法返回当前而不是下一个对象。因此,您在下一个按钮事件中有 2 个选项。
这里的问题是每次单击按钮时是否要移动到下一个树对象?如果是这样,增加当前属性,然后调用 getcurrent 来显示。如果您希望保留当前而不移动(即一遍又一遍地单击下一步将导致相同的结果),则显示 getcurrent().next_tree.tree_type 不增加当前。

于 2012-12-13T21:22:06.577 回答