Array.Max печатает весь массив с максимальным значением (C #) - PullRequest
0 голосов
/ 04 сентября 2018

Моя домашняя работа - написать код из двух основных частей: одна - создать текстовый файл с именами и номерами, а другая - прочитать тот же текстовый файл и распечатать наибольшее число из файла. Это часть кода, которая создает текстовый файл (с этим у меня нет проблем, он работает просто отлично), класс:

class Person
{
    public string Name;
    public string Age;
}

Основное:

        Person a = new Person();
        Person b = new Person();
        Person c = new Person();
        a.Name = "Abel";
        a.Age = "20";
        b.Name = "Bob";
        b.Age = "22";
        c.Name = "Cain";
        c.Age = "25";
        string[] People = { a.Name, a.Age, b.Name, b.Age, c.Name, c.Age };

        using (StreamWriter write = new StreamWriter(@"C:\Users\A\Desktop\file check\test.txt"))
        {
            for (int i = 0; i < People.Length; i++)
            {
                write.WriteLine(People[i]);
            }
        }

Текстовый файл очень прост и выглядит так:

Abel
20
Bob
22
Cain
25

Эта часть работает нормально. Часть, с которой у меня возникли проблемы, это часть, где я должен прочитать файл и напечатать наибольшее число, которое выглядит так:

        string PeopleCheck = @"C:\Users\A\Desktop\file check\test.txt";
        using (StreamReader read = new StreamReader(PeopleCheck))
        {
            while (true)
            {
                string FindMax = read.ReadLine();
                if (FindMax == null)
                {
                    break;
                }   
                int test;
                if(Int32.TryParse(FindMax, out test))
                {
                   // Console.WriteLine(FindMax); --> this will print all numbers, one number in each line
                    int[] numbers = FindMax.Split(' ').Select(n => Convert.ToInt32(n)).ToArray();
                    Console.WriteLine("the highest number is {0}", numbers.Max());
                }
            }
        }
    }

Я использовал этот пост: Преобразование строки в массив int с использованием LINQ , чтобы преобразовать строку в массив чисел. Я думал, что numbers.Max () выведет наибольшее число, но вывод выглядит так:

the highest number is 20
the highest number is 22
the highest number is 25
Press any key to continue . . .

Если кто-нибудь знает, как это исправить, чтобы на выходе было одно число, я буду очень признателен, заранее спасибо всем, кто пытается мне помочь.

1 Ответ

0 голосов
/ 19 сентября 2018

Вы читаете целые числа одно за другим, анализируете их одно за другим и печатаете для каждого целого числа текущее максимальное значение целых чисел, которые вы уже обработали.

Это совпадение, что список выходит без изменений, потому что список упорядочен по возрастанию. Если вы попробуете 3,2,1, то вы получите 3,3,3.

Печать после цикла один раз.

В будущем вы можете решить подобные проблемы с помощью отладчика. Это очень легко увидеть, пройдя по коду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...