【问题标题】:Display a Sequence in a Console in C#在 C# 的控制台中显示序列
【发布时间】:2015-08-20 22:53:17
【问题描述】:

我怎样才能显示一个看起来更像这样的输出

目标:

NOT like: // 末尾有逗号

目前显示: 1 , 2 , 1 , 1 , 2 , 1 ,

 for (int i = 1; i <= 7; i++)
 {
    int coin1 = RandomFlip(); //1 head 2 tails
    int coin2 = RandomFlip();
      
     if(coin1 == coin2)
      {
       Console.Write(coin1 + ", ")
      }
 }

【问题讨论】:

    标签: c# .net console sequence


    【解决方案1】:

    由于您不知道哪个迭代是最后一个循环,您必须建立一个结果列表,然后在稍后显示。

    var flipValues = List<int>();
    for (int i = 1; i <= 7; i++)
    {
       int coin1 = RandomFlip(); //1 head 2 tails
       int coin2 = RandomFlip();
       if(coin1 == coin2)
       {
           flipValues.Add(coin1);
       }
    }
    
    Console.Write(string.Join(", ", flipValues.Select(f => f.ToString());
    

    【讨论】:

    • 认为问题在于您不知道最后一个逗号何时会出现。如果 coin1 和 coin2 相等,它只会写入数字。所以它可能只在第一个循环中是正确的,这意味着逗号将出现在最后。
    • @shf301 逗号仍然显示在末尾。我按照您的说明进行操作,输出为 1,2,1,1,2, 。我的目标是让程序看起来像这样 2 之后没有逗号。
    【解决方案2】:

    您需要保留结果,直到您知道自己已完成,然后在获得整个列表后打印它们。这是这样做的一种方法:

    List<int> results = new List<int>();
    for (int i = 1; i <= 7; i++)
    {
        int coin1 = RandomFlip(); //1 head 2 tails
        int coin2 = RandomFlip();
    
        if(coin1 == coin2)
        {
            results.Add(coin1);
        }
    }
    Console.WriteLine(string.Join(", ", results.Select(ToString));
    

    【讨论】:

      【解决方案3】:
      var res = String.Join(", ", 
          Enumerable.Range(1, 7)
          .Select(n => 
          {
              int coin1 = RandomFlip(); //1 head 2 tails
              int coin2 = RandomFlip();
      
              return new { coin1, coin2 };
          })
          .Where(c => c.coin1 == c.coin2)
          .Select(c => c.coin1)
      );
      Console.Write(res);
      

      【讨论】:

        【解决方案4】:
        List<int> numbers = new List<int>();
        for (int i = 1; i <= 7; i++)
        {
            int coin1 = RandomFlip();
            int coin2 = RandomFlip();
            if (coin1 == coin2)
            {
                numbers.Add(coin1);
            }
        }
        string output = "";
        for(int i = 0; i < numbers.Count; i++)
        {
            output+=numbers[i].ToString();
            if (i < numbers.Count-1)
            {
                output+=", ";
            }
        }
        

        【讨论】:

        • 所以,看起来每个人都有相同的想法,awks。不知道这个“string.Join”存在。以后会用的^_^
        【解决方案5】:

        您可以做的是保留附加的输出字符串,在添加 coin1 输出之前添加逗号。如果字符串中没有任何内容,您只需要确保不要在字符串中添加逗号。

        string output = "";
        for (int i = 1; i <= 7; i++)
        {
            int coin1 = RandomFlip(); //1 head 2 tails
            int coin2 = RandomFlip();
        
            if (coin1 == coin2)
            {
                if (output != "")
                    output += ", ";
                output += coin1;
            }
        }
        Console.Write(output);
        

        【讨论】: