我正在使用链接列表。我的构造函数接受带有项目的数组,或者通过BtnAddTree
单击将项目(一次一个)附加到列表中。出于实验原因,我试图找出一种从列表中检索项目位置的方法。我设置了三个按钮,希望显示:first
,next
,last
项,并通过label
显示。我创建了两个函数来实现我的需求Retrieve
和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
}
}
}
答案 0 :(得分: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 click方法应该设置标签值。
你实际上应该完全摆脱这种方法(除非在上面的代码之外有某种原因。