如何使用数组 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# 将每月降雨量输出为“*”?的主要内容,如果未能解决你的问题,请参考以下文章