0

私はリンクリストを扱っています。私のコンストラクターは、アイテムを含む配列を取得するか、クリックしてリストにアイテムを (一度に 1 つ) 追加しBtnAddTreeます。実験的な理由から、リストからアイテムの位置を取得する方法を見つけようとしています。うまく表示される 3 つのボタンを設定しました: firstnextlast項目、およびlabel. Retrieve私は自分のニーズを達成するために 2 つの関数を作成しましCurrent_Tree()たが、ここで行き止まりになります。nextループを使用する必要がある可能性がある項目を表示することは承知していますが、その方法がわかりません。リストで見つかった項目の位置を表示するにはどうすればよいですか?

        public class ListForTrees
        {

        //Retrieve Position of item
            public void Retrieve(int Position)
            {
                int new_position = Position;
                fruit_trees current = first_tree;

                for (int i = 0; i < Position && current != null; i++)
                {
                    current = current.next_tree;
                }
                return current;
            }

        //Show Current Tree
            public void Current_Tree()
            {
                try
                {
                    current = fruit_trees.first_tree;
                    labelSpecificTree.Text = current.Type.ToString();
                }
                catch { };

            }         



        }

        ListForTrees mainlist = new ListForTrees();     

        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 ShowNextItem_Click(object sender, EventArgs e)
        {
        //Show Next Item
        }

        private void ShowLastItem_Click(object sender, EventArgs e)
        {
        //Show Last Item
        }

        private void ShowFirstItem_Click_1(object sender, EventArgs e)
        {
        // Show First Item
        }


    }
}
4

1 に答える 1

2

オブジェクトを適切に比較する方法を開発します。木の種類は独特ですか?多分あなたは完全なicomparableが必要ですか?

次に、listoftrees クラスにメソッドを作成します

public int getPosition(fruit_trees tree)
{
 fruit_trees ft = first_tree;
 if(ft.tree_type == tree.tree_type)
 {
      return 0; //or return 1 depending on how you want to index stuff
 }
 int i = 1;//possibly set to 2 if returning 1 above
 while(ft.next_tree != null)
 {
     ft = ft.next_tree;
     if(ft.tree_type == tree.tree_type)
     {
        return i; 
     }
     i++;
 }

 return -1; //or something else here to show that its not in the list

}

また、補足として..メソッド Current_Tree() のクラスにラベル値を設定しないでください。それは fruit_trees オブジェクトを返し、btn クリック メソッドは label 値を設定する必要があります。

実際には、そのメソッドを完全に削除する必要があります(上記のコードの外に何らかの理由がない限り.

于 2012-12-13T16:00:25.497 に答える