首页 > 解决方案 > For 循环在 C# 控制台中制作条形图

问题描述

我正在尝试制作一个接受两个值的函数:数组scores[]和 int elmts。该函数的目标是为score[]数组中的每个值打印一行 * 星。例如,如果我们有

int[] scores = {5, 1, 10};
elmts = 3;

我希望它打印到控制台:

 * * * * *
 *
 * * * * * * * * * * 

我尝试使用下面的两个嵌套 for 循环来实现这一点:

    for(int i = 0; i < elmts; i++)
    {
         for(int k = 0; k < scores[k]; k++)
         {
             Write(" *");
         }
         WriteLine();
    }

但输出是:

*
*
*

谁能告诉我这里哪里出错了?

标签: c#arraysfor-loopconsole

解决方案


我猜你的数组中的索引器错误,具体来说scores[k]应该是scores[i]

var scores = new[] {4, 3, 4, 6, 4};

for (int i = 0; i < scores.Length; i++)
{
   for (int k = 0; k < scores[i]; k++)
      Console.Write(" *");
   Console.WriteLine();
}

你可以这样做的另一种方法是

for (int i = 0; i < scores.Length; i++)
   Console.WriteLine(string.Concat(Enumerable.Repeat(" *", scores[i])));

或者

foreach (var score in scores)
    Console.WriteLine(string.Concat(Enumerable.Repeat(" *", score)));

或者

var graph = scores.Select(x => string.Concat(Enumerable.Repeat(" *", x)));
Console.WriteLine(string.Join(Environment.NewLine, graph));

输出

 * * * *
 * * *
 * * * *
 * * * * * *
 * * * *

推荐阅读