有一个Person
类,它包含以下内容:
SumToys()
返回直接对象中的所有“玩具”(正在调用SumToys
)及其直接子项(不是儿童的子项)。
class Person
{
private static int toys;
private static List<Person> children = new List<Person>();
//Constructor
public Person(int toysInput, List<Person> childrenInput)
{
toysInput = toys;
childrenInput = children;
}
//Returns its own toys and direct children but NOT children of children
public static int SumToys(List<Person> children)
{
int toysTotal = toys;
for(int i = 0; i < children.Count; i++)
{
toysTotal += children[i].SumToys(); //I am trying to call SumToys but it says to 'qualify it as a type name instead
}
return toysTotal;
}
}
这是树应该是什么样子的草图:
因此,如果我在对象2上调用SumToys
,它应该返回13.如果我在对象4上调用它,那么它应该返回4.
答案 0 :(得分:3)
从班级成员中删除所有static
个关键字。静态成员的值在不同的类实例之间共享。
修复构造函数以更新类成员而不是更新提供的输入参数
让Toys
成员公开阅读并在总金额计算中使用它
当你给孩子打电话SumToys
时,它会计算所有后代的玩具总量。
您不需要提供子项作为SumToys
的参数,因为已经在构造函数中给出了子项。
public class Person
{
public int Toys { get; };
private List<Person> children;
public Person(int toys, List<Person> childrens)
{
ToysInput = toysInput;
children = childrenInput;
}
public int SumToys()
{
var total = toys;
for(int i = 0; i < children.Count; i++)
{
toysTotal += children[i].Toys;
}
return total;
}
}
使用类看起来像
var four = new Person(4, new List<Person());
var five = new Person(5, new List<Person());
var six = new Person(6, new List<Person());
var two = new Person(2, new List<Person { five, six });
four.SumToys() // return 4
two.SumToys() // return 13
作为计算玩具总和的替代方法,您可以使用LINQ
public int SumToys()
{
return children.Aggregate(Toys, (total, child) => total += child.Toys);
}