首页 > 解决方案 > C#。Console.ReadLine() 用于两个不同的对象

问题描述

我正在学习 C#,并且对这个主题非常陌生。目前,我正在开发一个小型控制台应用程序(只是做一些任务来增强我的知识)战舰游戏。我想分配两个名称:玩家 1 和玩家 2。

问题是:我可以使用一个阅读器而不是两个阅读器来分配不同的名称吗?我尝试使用一个阅读器,但它为两个玩家分配了一个名称。

这是我的代码:

public void StartGame(Game game)
        {
            if (game.GameStage == GameStage.Start)
            {
                Console.WriteLine("Welcome to Battleship 2020.");
                Console.WriteLine("Player 1 enter your name:");

                var reader1 = Console.ReadLine();
                Player player1 = new Player();
                player1.Name = reader1;

                Console.WriteLine($"Welcome {player1.Name}");

                Console.WriteLine("Player 2 enter your name:");
                Player player2 = new Player();
                var reader2 = Console.ReadLine();
                player2.Name = reader2;

                Console.WriteLine($"Welcome {player2.Name}");
            }
        }

标签: c#console-applicationconsole.readline

解决方案


如果您想同时读取两个玩家名称,(您可以先提示用户)并告诉他们输入玩家名称逗号或空格分隔,然后在读取玩家名称后自行分隔它们

 var reader = Console.ReadLine();
 var playerNames = reader.Split(' '); // payerNames[0], playerNames[1] contains player names

如果您的意思只是重用reader变量。您可以随时使用它,但第一次需要声明它。

 var reader = Console.ReadLine();
 ...
 reader = Console.ReadLine();
 ...
 reader = Console.ReadLine();

你可以把它放在一个循环中,比如:

for(int i = 0; i < 2; i++)
{
    var reader = Console.ReadLine();
    ...
}

如果你想确保没有输入空值,你可以使用do...while并循环直到设置一个有效值。(重试空值或无效值):

for(int i = 0; i < 2; i++)
{
    do
    {
        player[i] = Console.ReadLine();
    } while(player[i].Trim() != "");
}

推荐阅读