#c# #arrays
Вопрос:
Я создал программу, которая позволяет пользователю вводить количество осадков в течение года. Затем программа предназначена для вывода диаграммы, а также обобщенных данных, таких как среднее, максимальное, минимальное и общее количество осадков.
В то время как все мои выходные данные, основанные на данных, работают, фактическая диаграмма, предназначенная для отображения чисел, введенных звездочками, не работает.
Я не могу до конца понять, где я ошибся. Я связал пример вывода таблицы»*», а также мой фактический код ниже. Любая помощь была бы очень признательна. Кстати, я новичок в C#. Пример вывода
int[] monthrainfall = new int[12];
int i;
double average;
int total = 0;
int max = 0;
int min = Int32.MaxValue;
string bar = "";
//title
Console.Write("nnRainfall 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();
Комментарии:
1. Добро пожаловать в stackoverflow. Поскольку это похоже на домашнее задание, я бы предпочел дать вам советы. таким образом, в коде , который генерирует диаграмму осадков, которую вы не используете
monthrainfall[i]
, также может потребоваться вложенный цикл.2.
System.String
Класс (он жеstring
класс) имеет конструктор, который принимаетchar
и целое число. Еслиvar lineOfGraph = new string ('*', 5);
вы скажете, что получите строку, которая выглядит так"*****"
3. Моя программа все еще не работает…
4. Поскольку строка в основном представляет собой массив
char
, то, что вы печатаетеbar[i]
, — это символ в позиции[i]
, поэтому в результате будет только одна звездочка*
.5. Я все еще не понимаю. Как мне исправить свою ошибку?
Ответ №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
Комментарии:
1. этот код не запускается…
Ответ №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[i]
строки bar
.
Модификация будет заключаться в Console.WriteLine("{0} ", bar);
Комментарии:
1. Спасибо! Теперь я вижу, где я ошибся. Я очень благодарен вам за помощь! Надеюсь, однажды я смогу помочь другим, как только стану лучшим программистом!