c# - 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}");
}
}
解决方案
如果您想同时读取两个玩家名称,(您可以先提示用户)并告诉他们输入玩家名称逗号或空格分隔,然后在读取玩家名称后自行分隔它们
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() != "");
}