Is there a method to find the max of 3 numbers in C#?

Viewed 140252

The method should work like Math.Max(), but take 3 or more int parameters.

13 Answers

Maximum element value in priceValues[] is maxPriceValues :

double[] priceValues = new double[3];
priceValues [0] = 1;
priceValues [1] = 2;
priceValues [2] = 3;
double maxPriceValues = priceValues.Max();

This function takes an array of integers. (I completely understand @Jon Skeet's complaint about sending arrays.)

It's probably a bit overkill.

    public static int GetMax(int[] array) // must be a array of ints
    {
        int current_greatest_value = array[0]; // initializes it

        for (int i = 1; i <= array.Length; i++)
        {
            // compare current number against next number

            if (i+1 <= array.Length-1) // prevent "index outside bounds of array" error below with array[i+1]
            {
                // array[i+1] exists
                if (array[i] < array[i+1] || array[i] <= current_greatest_value)
                {
                    // current val is less than next, and less than the current greatest val, so go to next iteration
                    continue;
                }
            } else
            {
                // array[i+1] doesn't exist, we are at the last element
                if (array[i] > current_greatest_value)
                {
                    // current iteration val is greater than current_greatest_value
                    current_greatest_value = array[i];
                }
                break; // next for loop i index will be invalid
            }

            // if it gets here, current val is greater than next, so for now assign that value to greatest_value
            current_greatest_value = array[i];
        }

        return current_greatest_value;
    }

Then call the function :

int highest_val = GetMax (new[] { 1,6,2,72727275,2323});

// highest_val = 72727275

If you don't want to repeatedly calling the Max function, can do like this

new List<int>() { A, B, C, D, X, Y, Z }.Max()

You can use if and else if method for three values but it would be much easier if you call call twice Math.Max method like this

        Console.WriteLine("Largest of three: " + Math.Max(num1, Math.Max(num2, num3)));
        Console.WriteLine("Lowest of three: " + Math.Min(num1, Math.Min(num2, num3)));

       
    

in case you need sorting as well:

var side = new double[] {5,3,4}
Array.Sort(side);

//side[2] is a maximum

as an another variant:

T[] GetMax<T>(int number, List<T> source, T minVal)
{
  T[] results = new T[number];

  for (int i = 0; i < number; i++)
  {
    results[i] = minVal;
  }

  var curMin = minVal;

  foreach (var e in source)
  {
    int resComp = Comparer.DefaultInvariant.Compare(curMin, e);

    if (resComp < 0)
    {
      int minIndex = Array.IndexOf(results, curMin);
      results[minIndex] = e;
      curMin = results.Min();
    }
  }

  return results;
}

  var source = new int[] { 5, 5, 1, 2, 4, 3 }.ToList();
  var result = GetMax(3, source, int.MinValue);
Related