【问题标题】:How do I output monthly rainfall as "*" using arrays C#?如何使用数组 C# 将每月降雨量输出为“*”?
【发布时间】:2021-12-04 21:52:38
【问题描述】:

我创建了一个程序,允许用户输入一年中的降雨量。然后,该程序旨在输出图表以及汇总数据,例如平均、最大、最小和总降雨量。

虽然我基于数据的所有输出都有效,但用于显示带星号输入的数字的实际图表不起作用。

我不太明白我哪里出错了。我已经链接了“*”表的示例输出以及下面的实际代码。任何帮助将非常感激。顺便说一句,我是 C# 的初学者。 Example output

        int[] monthrainfall = new int[12];
        int i;
        double average;
        int total = 0;
        int max = 0;
        int min = Int32.MaxValue;
        string bar = "";

        //title
        Console.Write("\n\nRainfall Data:\n");
        Console.Write("**************\n");

        //asks user to input names
        Console.Write("Enter Rainfall for the year:\n");

        for (i = 0; i < 12; i++)
        {
            Console.Write("Enter rainfall for month {0}: ", i + 1);
            monthrainfall[i] = Convert.ToInt32(Console.ReadLine());
        }

        //outputs rainfall results
        Console.WriteLine("\nRainfall Chart");
        Console.WriteLine("**************");

        //outputs results for each month
        for (i = 0; i < 12; i++)
        {
            Console.Write("Month {0}: ", i + 1);
            bar = bar + "*";
            Console.WriteLine("{0} ", bar[i]);
        }

        Console.WriteLine("\nSummary data");
        Console.WriteLine("**************");

        //calculates the maximum rainfall
        for (int index2 = 0; index2 < 12; index2++) //inline variable declaration
        {
            if (monthrainfall[index2] > max) max = monthrainfall[index2];
        }
        Console.WriteLine("The maximum rainfall was: " + max);

        //calculates the minimum rainfall

        for (int index3 = 0; index3 < 12; index3++) //inline variable declaration
        {
            if (monthrainfall[index3] < min) min = monthrainfall[index3];
        }
        Console.WriteLine("The minimum rainfall was: " + min);

        //calculates average rainfall
        for (int index = 0; index < 12; index++)
        {
            total = total + monthrainfall[index];
        }
        average = (total) / 12;

        Console.WriteLine("The average rainfall was: " + average);
        Console.WriteLine("The total rainfall was: " + total);
        Console.ReadKey();

【问题讨论】:

  • 欢迎来到stackoverflow。由于这似乎是一项家庭作业,我宁愿给你一些提示。因此,在生成降雨图的代码中,您没有使用 monthrainfall[i] ,您可能还需要一个嵌套循环。
  • System.String 类(又名string 类)有一个构造函数,它接受一个char 和一个整数计数。如果你说var lineOfGraph = new string ('*', 5);,你会得到一个看起来像"*****"的字符串
  • 我的程序还是没有运行...
  • 由于字符串基本上是char 的数组,因此您在bar[i] 中打印的是位于[i] 位置的字符,因此只会产生一个星号*。跨度>
  • 我还是不明白。如何解决我的错误?

标签: c# arrays


【解决方案1】:
    for (i = 0; i < 12; i++)
    {   //loop every month
        Console.Write("Month {0}: ", i + 1);
bar = "";
for(int stars = 0; stars < monthrainfall[i]; stars++)
{
    bar = bar + "*";
}
        Console.WriteLine("{0} ", bar[i]);
    }

但正如@Flydog57 所说,使用字符串构造函数而不是额外的 for 循环

【讨论】:

  • 这段代码没有运行...
【解决方案2】:

所有的解释都将在这部分代码中进行

//outputs results for each month
for (i = 0; i < 12; i++)
{
    Console.Write("Month {0}: ", i + 1);
    bar = bar + "*";
    Console.WriteLine("{0} ", bar[i]);
}

第 1 部分:bar = bar + "*"; 上,您只为循环的每次迭代添加一个*。但是,您需要根据monthrainfall 中输入的内容添加数字。

正如@Flydog57 建议的那样,修改将是 bar = new string('*', monthrainfall[i]);


第 2 部分:Console.WriteLine("{0} ", bar[i]); 上,您只打印了一个*,因为您选择了字符串bar 的元素bar[i]

修改为Console.WriteLine("{0} ", bar);


【讨论】:

  • 谢谢!我现在知道我哪里出错了。我非常感谢您的帮助!希望有一天我成为一名更好的程序员后可以帮助别人!
猜你喜欢
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 2013-12-30
  • 1970-01-01
相关资源
最近更新 更多