【问题标题】:C# Formatting Long List of Numbers To Be More CompactC# 格式化一长串数字以更紧凑
【发布时间】:2016-11-15 14:55:27
【问题描述】:
Console.WriteLine("     Even Table \n");
int MaxNumber = 100;
int EvenNumbers = 0;
int i;

for (i = 0; i <=MaxNumber; i+=2)
{
    if (i % 2 == 0)
    {
        EvenNumbers = i;
    }
    Console.Write(EvenNumbers);
}

输出:

        Even Table

0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52  54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100

我正在制作一个显示 2 到 100 之间的偶数的程序。我能够显示偶数,尽管由于 Console.Write 的原因,输出的格式是一条直线,是否有一种字符串格式可以让输出显示每个偶数,但切到一个新的每间隔20行?所以它看起来像:

1-20

20-40

40-60

ETC

【问题讨论】:

  • int threshold = 20; 然后在你的Console.Write 之前做if(i % 20 == 0){Console.WriteLine(EvenNumbers)}else{Console.Write(EvenNumbers)}
  • Google for Console.Write new line ?
  • int阈值的作用是什么?
  • @KyleMyott , threshold 计算显示的数字。如果它可以被 20 整除,则表示已经显示了 20 个数字。看我的回答。
  • 哦,我明白了。谢谢。

标签: c# string formatting output


【解决方案1】:

Linq! 减少行数:p

foreach (var even in Enumerable.Range(2, 100).Where(i => i % 2 == 0))
    Console.Write(even % 20 != 0 ? even.ToString() + " " : even.ToString() + "\n");

【讨论】:

  • 改成这个就可以了:Console.Write(even % 20 != 0 ? even.ToString()+" " : even.ToString() + "\n");
  • 是的!一开始我忘记了ToString()。谢谢!
  • 不错的解决方案,@LuisLavieri。
  • 哦。现在,我明白你对格式的意思了!谢谢@AlexandruMihai :)
【解决方案2】:

使用这个:

for (i = 0; i <=MaxNumber; i+=2)
{
    EvenNumbers = i;
    Console.Write(EvenNumbers+" ");
    if(i%20==0){
        Console.WriteLine();
    }
}

您不需要条件if (i % 2 == 0),因为您的步骤是 2。

【讨论】:

  • 效果很好,谢谢。 \n 是否也可以在未来以某种方式以 20 的阈值实现?
  • @KyleMyott,是的。 Console.WriteLine()Console.Write("\n"); 相同
  • 其实,如果你想要一种便携的方式来写换行符,那就是Console.Write(Environment.NewLine);
【解决方案3】:

作为 Luis 解决方案的补充,您可以使用以下代码轻松完成:

foreach (var item in Enumerable.Range(1, 100).Where(o => o % 2 == 0).GroupBy(o => (int)(o / 20.01)))
        {
            Console.WriteLine(string.Join(" ", item.ToArray()));
        }

循环按“20”分组,按 int 的模 2 枚举过滤,并用 string.join 将其打印在一行中 如果您希望您的第一个数字是 20、40、60...,则需要转换 groupby... 否则它以 22、42、62... 开头。

希望对你有帮助

【讨论】:

  • 确实如此,这对于更复杂的编码很有用,我需要了解它而不是我目前正在做的简单事情。
【解决方案4】:

试试下面;它也会考虑 0;否则 0 将被隔离。

        Console.WriteLine("     Even Table \n");
        int MaxNumber = 100;
        int EvenNumbers = 0;
        int i;

        for (i = 0; i <= MaxNumber; i += 2)
        {
            if (i % 2 == 0)
            {
                EvenNumbers = i;
            }

            Console.Write(" ");
            Console.Write(EvenNumbers);
            if (i % 20 == 0 && i>0)
            {
                Console.WriteLine();
            }
        }

【讨论】:

    【解决方案5】:

    这是使用Enumerable.RangeString.Join 的不同方法:

    int MaxNumber = 100;
    
    // create a list of all even numbers
    List<int> even_list = Enumerable.Range(0, MaxNumber+1).Where(x => x % 2 == 0).ToList();
    
    // for the amount of numbers to be displayed in a line
    int numbers_in_single_line = 10
    for (int i = 1; i <= even_list.Count; i += numbers_in_single_line)
    {
        Console.WriteLine(String.Join(" ", even_list.Skip(i).Take(numbers_in_single_line )));
    }
    

    Skip()Take() 允许您从列表中的特定位置选择值

    【讨论】:

      猜你喜欢
      • 2014-02-19
      • 1970-01-01
      • 2017-07-19
      • 2021-05-11
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多