【问题标题】:C#. Console.ReadLine() for two different obejcts [closed]C#。 Console.ReadLine() 用于两个不同的对象[关闭]
【发布时间】:2020-12-25 11:30:32
【问题描述】:

我正在学习 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}");
            }
        }

【问题讨论】:

  • 当然可以,您需要创建一个 while 循环,在您到达 2 输入时中断。
  • “使用一个阅读器” - 这是什么意思?
  • @maytham-ɯɐɥʇʎɐɯ 他可以简单地使用for (int i = 0; i < 2; i++)循环然后:-)
  • works for me - 你没有在这里“使用两个阅读器”
  • @xanatos 完全同意这是从某个地方开始的概念示例:)

标签: c# console-application console.readline


【解决方案1】:

Console.ReadLine() 不返回任何“读者”。它只返回 String 对象,其中包含从控制台输入中获取的文本。
方法名称中的 line 意味着它将读取输入中可用的所有内容,直到遇到换行符。
如果没有换行符,它将永远等待,直到用户按下“enter”键。 如果buffer中有很多文本行,需要多次调用ReadLine()。

您可以使用以下方式直接指定玩家名称:

 player1.Name = Console.ReadLine(); 

【讨论】:

    【解决方案2】:

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

     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() != "");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-10
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多