Как вывести количество осадков за месяц в виде»*», используя массивы C#?

#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. Спасибо! Теперь я вижу, где я ошибся. Я очень благодарен вам за помощь! Надеюсь, однажды я смогу помочь другим, как только стану лучшим программистом!