C#仅用for循环能否实现先录入全部人员信息再统一输出结果
问题描述
原有代码
Person类定义
public class Person { public string Name; public int BirthYear; public int Age(int birthYear) { DateTime presents = DateTime.Now; int presentAge = presents.Year - birthYear; return presentAge; } }
原主程序代码
static void Main(string[] args) { Console.WriteLine("Input peoples: "); int people = Convert.ToInt32(Console.ReadLine()); Person a = new Person(); for(int i = 0; i < people; i++) { Console.WriteLine("Person {0}", i + 1); Console.Write("Enter the name: "); a.Name = Console.ReadLine(); Console.Write("Enter the birth year: "); a.BirthYear = Convert.ToInt32(Console.ReadLine()); int present = a.Age(a.BirthYear); Console.WriteLine("Hello {0}, your age is {1} years old", a.Name, present); } }
当前运行结果(输入2名人员时)
Person 1 Enter the name: Lu Bu Enter the birth year: 1998 Hello Lu Bu, your age is 23 years old Person 2 Enter the name: Diao Chan Enter the birth year: 2000 Hello Diao Chan, your age is 21 years old
期望运行结果
Person 1 Enter the name: Lu Bu Enter the birth year: 1998 Person 2 Enter the name: Diao Chan Enter the birth year: 2000 Hello Lu Bu, your age is 23 years old Hello Diao Chan, your age is 21 years old
提问
请问该需求是否可以仅使用for循环实现,还是必须使用List<>?注:问题中提到的“list”并非指C#泛型List<>。
解答
可以仅通过for循环实现需求,不需要使用C#泛型List<>。
原有代码的问题是把录入信息和输出结果的逻辑耦合在同一个for循环里,每录入一条就输出一条,自然和预期的先全量录入再全量输出的顺序不符。只需要把单循环拆分为两个独立的for循环即可:第一个循环专门负责录入所有人员信息,第二个循环专门负责统一输出所有结果。
你可以用基础数组配合for循环存储人员信息,修改后的主程序代码如下:
static void Main(string[] args) { Console.WriteLine("Input peoples: "); int people = Convert.ToInt32(Console.ReadLine()); // 用固定长度数组存储所有人员信息,无需使用List<> Person[] personArr = new Person[people]; // 第一个for循环:仅完成所有人员信息录入 for(int i = 0; i < people; i++) { personArr[i] = new Person(); Console.WriteLine("Person {0}", i + 1); Console.Write("Enter the name: "); personArr[i].Name = Console.ReadLine(); Console.Write("Enter the birth year: "); personArr[i].BirthYear = Convert.ToInt32(Console.ReadLine()); } // 第二个for循环:统一输出所有人员的年龄信息 for(int i = 0; i < people; i++) { int presentAge = personArr[i].Age(personArr[i].BirthYear); Console.WriteLine("Hello {0}, your age is {1} years old", personArr[i].Name, presentAge); } }
如果你不想使用数组存储,也可以在第一个for循环中逐次拼接需要输出的内容到字符串变量中,全部录入完成后直接输出拼接好的内容,该方案同样仅用到for循环即可实现。
内容的提问来源于stack exchange,提问作者PostJavanese
相关产品推荐
相关产品推荐

