如何使用数组 C# 将每月降雨量输出为“*”?

Posted

技术标签:

【中文标题】如何使用数组 C# 将每月降雨量输出为“*”?【英文标题】:How do I output monthly rainfall as "*" using arrays 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();

【问题讨论】:

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


【讨论】:

谢谢!我现在知道我哪里出错了。我非常感谢您的帮助!希望有一天我成为一名更好的程序员后可以帮助别人!

以上是关于如何使用数组 C# 将每月降雨量输出为“*”?的主要内容,如果未能解决你的问题,请参考以下文章

2018.2.28思考与练习

如何将 foreach 输出为字符串 c# // g 打印为数组而不是字符串

如何使用 C# 从表中的二维数组输出值

C#:如何将多个字符串拆分为二维数组?

如何使用 2D 数组 C# 将结果放入表中

Java多维数组平均