【问题标题】:Drawing a vertical histogram c#绘制垂直直方图 c#
【发布时间】:2016-11-25 11:15:00
【问题描述】:

我想从一个整数数组计算控制台中的垂直直方图。 数组被这个正弦公式填充,然后两个 for 循环应该会发挥作用:

for (int i = 0; i < 30; i++) //fill array
    f[i] = (int)(10 * Math.Sin(2 * Math.PI / 30 * i) + 15);

//draw histogram:
int maxValue = f.Max(); 
for (int i = 0; i <= maxValue; i++)
{
    for (int j = 0; j < f.Length; j++)
      {
        if (f[j] >= maxValue)
            Console.Write("*");
        else
            Console.Write(" ");
      }
    maxValue--;
    Console.Write("\n");
}

这是我的代码输出的内容: my result

但是结果应该是这样的: right solution

它的部分工作直到第 13 行星星和空间...

从我的结果中可以看出:它确实有效,但不知何故,外部 for 循环只想运行 13 次然后决定停止,但我不知道为什么。这也是我问这个问题的原因。

提前致谢!!

【问题讨论】:

    标签: c# for-loop console histogram


    【解决方案1】:

    将填充数组部分改为:

    f[i] = (int)(10 * Math.Sin(2 * Math.PI / 30 * i) + 40);
    

    【讨论】:

      【解决方案2】:

      您在水平和垂直维度上都使用了maxValue,这不可能是正确的。

      改变外循环的退出条件。而不是这个:

      for (int i = 0; i <= maxValue; i++)
      

      ...写这个:

      for (int i = 0; i <= f.Length; i++)
      

      ...得到这个:

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

      【讨论】: