You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:45:07