You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C#调整Console.WriteLine位置实现电影名、导演名及年份同行输出的问题

C#调整Console.WriteLine位置实现电影名、导演名及年份同行输出的问题

我完全懂你现在的烦恼——原来的代码先一股脑输出100个导演名,再输出100个电影名,不仅没法让每个电影对应上专属导演,还凑不上年份,而且变量被锁在小循环里,根本没法把三个信息放同一行。咱们一步步来把这个问题理顺:

核心问题分析

  • 你现在的循环结构是分离的两组循环:先跑100次生成导演名并逐个输出,再跑100次生成电影名逐个输出,这就导致两者完全没法一一配对,更别说加年份了。
  • 变量directornamemoviename都定义在各自的内层循环里,作用域只限于那个小循环,出了循环就访问不到,所以没法在外层把它们凑一起输出。
  • 重复创建Random实例可能导致随机序列重复(因为默认用系统时间做种子,短时间内创建的实例种子相同),咱们只需要一个Random实例就够了。

解决方案:重构循环结构,一次性生成一组信息

咱们把逻辑改成一次循环生成一组(电影名+导演名+年份),然后在同一个循环里完成输出,这样就能轻松把三个信息放在同一行。具体步骤:

  1. 只创建一个Random实例,放在方法最开头,避免重复种子的问题。
  2. 外层循环跑100次,每次循环里:
    • 生成5位随机大写字母的导演名
    • 生成5位随机大写字母的电影名
    • 生成1896到2021之间的随机年份
    • 用一次Console.WriteLine把这三个信息拼接成一行输出

修改后的完整代码

private static void GenerateRandomNames()
{
    // 只创建一个Random实例,避免重复随机序列
    Random random = new Random();

    // 外层循环跑100次,每次生成一组完整的电影信息
    for (int i = 0; i < 100; i++)
    {
        // 生成导演名:5位大写字母
        string directorName = "";
        for (int j = 0; j < 5; j++)
        {
            // 注意:Random.Next是左闭右开区间,所以用65到91才能包含ASCII码90(字母Z)
            char randomChar = (char)random.Next(65, 91);
            directorName += randomChar;
        }

        // 生成电影名:5位大写字母
        string movieName = "";
        for (int j = 0; j < 5; j++)
        {
            char randomChar = (char)random.Next(65, 91);
            movieName += randomChar;
        }

        // 生成1896到2021之间的随机年份,同样用左闭右开区间,上限设为2022
        int releaseYear = random.Next(1896, 2022);

        // 一次性输出三个信息,格式符合你的需求
        Console.WriteLine($"{movieName}, {directorName}, {releaseYear}");
    }
}

关键细节说明

  • Random实例提到最外层,确保每次生成的随机数都是独立不重复的,避免短时间内创建多个实例导致的重复序列问题。
  • 每个循环迭代里同时生成导演名、电影名和年份,变量作用域刚好覆盖到输出语句,能直接使用。
  • 用字符串插值$""来拼接信息,比传统的+拼接更简洁易读,也不容易出错。
  • 特别注意Random.Next的左闭右开特性:比如要包含ASCII码90(字母Z),就得把上限设为91;要包含年份2021,就得把上限设为2022。

这样修改后,每次循环都会输出一行类似KFJU, MDDOS, 1922的内容,完全符合你的需求啦!

备注:内容来源于stack exchange,提问作者Uuno Purhaturo

火山引擎 最新活动