C # Использование итерации для вычисления наименьшего значения в двумерном массиве - PullRequest
0 голосов
/ 23 сентября 2019

Я только начал свой первый класс программирования на C # (опыта программирования вообще нет), и я должен попросить пользователя ввести в течение 5 дней количество осадков в каждый из этих дней и сохранить данные в виде двумерного массива строк.названный rainfallData.Затем мне нужно найти суммы, средние, самые низкие и самые высокие значения, введенные, используя итерацию.Сумма и среднее значение я выяснил, но я не могу понять, как найти самые низкие и значения.Я знаю, как найти самые низкие и самые высокие значения в одномерном массиве, но не могу определить итерацию, необходимую для его поиска в многомерном массиве.

string[,] rainfallData = new string[5, 2];

Console.Write("\nPlease enter a day of the week: ");
rainfallData[0, 0] = Console.ReadLine();

Console.Write("\nHow many inches of rain did you get on {0}: ", rainfallData[0, 0]);
rainfallData[0, 1] = Console.ReadLine();

Console.Write("\n\nPlease enter the next day of the week: ");
rainfallData[1, 0] = Console.ReadLine();

Console.Write("\nHow many inches of rain did you get on {0}: ", rainfallData[1, 0]);
rainfallData[1, 1] = Console.ReadLine();

Console.Write("\n\nPlease enter the next day of the week: ");
rainfallData[2, 0] = Console.ReadLine();

Console.Write("\nHow many inches of rain did you get on {0}: ", rainfallData[2, 0]);
rainfallData[2, 1] = Console.ReadLine();

Console.Write("\n\nPlease enter the next day of the week: ");
rainfallData[3, 0] = Console.ReadLine();

Console.Write("\nHow many inches of rain did you get on {0}: ", rainfallData[3, 0]);
rainfallData[3, 1] = Console.ReadLine();

Console.Write("\n\nPlease enter the next day of the week: ");
rainfallData[4, 0] = Console.ReadLine();

Console.Write("\nHow many inches of rain did you get on {0}: ", rainfallData[4, 0]);
rainfallData[4, 1] = Console.ReadLine();

double myMin2 = Convert.ToDouble(rainfallData[0, 1]);
for (int i = 0; i < rainfallData.GetLength(0); i++)
{
   foreach (double element in rainfallData[i, 1])
     {
     if (element < myMin2)
     {
       myMin2 = element;
     }
     }
}
Console.WriteLine("The day with the lowest amount of rainfall received {0}\" of rain.\n", myMin2);

Независимо от того, какие значения вводятся для количества осадков, myMin2всегда значение rainfallData [0,1].Я понимаю, что это потому, что я установил myMin2 = Convert.ToDouble (rainfallData [0, 1], однако этот же формат работал при поиске наименьшего значения одномерного массива ранее в коде. Циклы бросают меня для цикла иЯ застрял в этом одном разделе в течение 3 часов. Я хотел найти ответ самостоятельно, но я боюсь, что не могу увидеть лес за деревьями в этот момент, и я трачу драгоценное время, которое у меня сейчас не хватает.

PS - Я сделал все возможное, чтобы опубликовать все правильно, но я впервые публикую на этом сайте, и я пока не знаю всех правил. Извините, если я сделал это неправильно.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019
string[,] rainfallData = new string[5, 2];
        int b = 0;
        int lowest = 99,highest=0;
        for (int i = 0; i <rainfallData.Length-5; i++)
        {

            for (b = 0; b < 1; b++)
            {

                if (i != rainfallData.Length)
                {
                    Console.Write("Please enter a day of the week: ");
                    rainfallData[i, b] = Console.ReadLine();
                    Console.Write("How many inches of rain did you get on {0}: ", rainfallData[i, b]);
                    rainfallData[i, b] = Console.ReadLine();
                }
                else
                    break;

            }

        }
        for (int i = 0; i < rainfallData.Length-5; i++)
        {
            for (b = 0; b<1; b++)
            {
                lowest = Math.Min(lowest, Convert.ToInt32(rainfallData[i, b]));
                highest = Math.Max(highest, Convert.ToInt32(rainfallData[i, b]));

            }

        }

        Console.WriteLine("The day with the lowest amount of rainfall received {0}\" of rain.", lowest);
        Console.WriteLine("The day with the highest amount of rainfall received {0}\" of rain.", highest);
0 голосов
/ 23 сентября 2019

Проблема в том, что вы сохраняете все свои данные как String, а затем хотите работать как Double

Это не самый эффективный код, но он близок к вашему, поэтому я думаю, вы пойметеэто:

            string[,] rainfallData = new string[5, 2];

            // Load data for 5 days. All the data is stored as string
            for (int dayOfWeek = 0; dayOfWeek < 5; dayOfWeek++)
            {
                Console.WriteLine("Please enter a day of the week: ");
                rainfallData[dayOfWeek, 0] = Console.ReadLine();

                Console.WriteLine($"How many inches of rain did you get on {rainfallData[dayOfWeek, 0]}");
                rainfallData[dayOfWeek, 1] = Console.ReadLine();
            }


            // Now let's find the minimum.
            double minRain = Double.Parse(rainfallData[0, 1]);
            for (int dayOfWeek = 1; dayOfWeek < rainfallData.GetLength(0); dayOfWeek++)
            {
                // you need to convert to double, and then compare.
                double rainOnDayOfWeek = Double.Parse(rainfallData[dayOfWeek, 1]);
                if (rainOnDayOfWeek < minRain)
                {
                    minRain = rainOnDayOfWeek;
                }
            }
            Console.WriteLine($"The day with the lowest amount of rainfall received {minRain} of rain.");

дайте мне знать, если вы этого не понимаете

---- РЕДАКТИРОВАТЬ ----

Нелегко объяснить только написаниепочему ваш код не работает, здесь я пытаюсь:

                // Here a lot of very confusing things are happening:
                // 1. All Strings are an array of characters, so here you are doing: "foreach character in rainfallData[i, 1]"
                // 2. In all programming languages, every character is also a code (number). That is called ASCII code. 
                // because you do "double element" you are asking C# to convert that character into it's code
                // for example, 'a' = 97, 'b' = 98, 'A' = 65, 'B' = 66, '1' = 49, '2' = 50
                foreach (double element in rainfallData[i, 1])
                {
                    if (element < myMin2)
                    {
                        myMin2 = element;
                    }
                }

                // This code is exactly the same as the previous one.
                // Maybe here you understand better what is going on
                foreach (char element in rainfallData[i, 1])
                {
                    // This is not the same as Convert.ToDouble, here you are getting the ASCII code of the char
                    double elementCode = (double)element; 
                    if (element < myMin2)
                    {
                        myMin2 = element;
                    }
                }

---- РЕДАКТИРОВАТЬ 2 ---- Попробуйте добавить эту строку в ваш код и выполнить его.Может быть, вы понимаете, что я имел в виду:

Console.WriteLine($"Element = '{element}'. In ASCII, '{element}' == '{(char)element}' and myMin2 = '{myMin2}'");

            double myMin2 = Convert.ToDouble(rainfallData[0, 1]);
            for (int i = 0; i < rainfallData.GetLength(0); i++)
            {
                foreach (double element in rainfallData[i, 1])
                {
                    Console.WriteLine($"Element = '{element}'. In ASCII, '{element}' == '{(char)element}' and myMin2 = '{myMin2}'");
                    if (element < myMin2)
                    {
                        myMin2 = element;
                    }
                }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...