Показать два старших номера N c # - PullRequest
0 голосов
/ 03 мая 2018

У меня есть вопрос, я хочу знать, как я могу показать на CONSOLE 2 самых больших из N введенных номеров? Я делаю что-то вроде этого:

Console.WriteLine("Enter the weight of the fish:");
if(decimal.TryParse(Console.ReadLine(), out _fishWeight))
{
    if (_fishWeight > _highest2)
    {
        _highest = _fishWeight;
        if (_fishWeight < _highest1)
        {
            _highest = _fishWeight;
        }
    }       
} 

но это не работает. Это только показывает мне _highest1, но не другой _highest ...

Если кто-то может мне помочь, я был бы очень рад!

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Math.Max() ваш друг здесь. Нет необходимости выполнять ручное сравнение, просто введите два значения, оно выведет наибольшее из них и просто установите его на _heighestWeight.

while (true)
{
    Console.Write("Enter the weight of the fish: ");
    var input = Console.ReadLine();
    if (decimal.TryParse(input, out _fishWeight))
    {
        break;
    }

    Console.WriteLine("Please only enter a decimal number");
    Console.Clear();
}

_heighestWeight = Math.Max(_fishWeight, _heighestWeight);

Я также добавил цикл while на случай, если они введут что-то отличное от десятичного числа.

0 голосов
/ 03 мая 2018

Вы хотите что-то более похожее на

if (_fishweight > _highest)
{
    _highest2 = _highest;
    _highest = _fishweight;
}
else if(_fishweight > _highest2)
{
    _highest2 = _fishweight;
}

В качестве альтернативы, если вы хотите более гибкую таблицу лидеров

// declare something like...

    private List<int> _leaderboard = new List<int>();
    private readonly int _leaderboardCount = 2;

// then update it like...    
    _leaderboard.Add(_fishweight);
    _leaderboard = _leaderboard.OrderByDescending(v => v).Take(_leaderboardCount).ToList();

Теперь у вас есть топ-2, но вы можете легко изменить его на топ-10 позже, если хотите.

...