Что писать если отсутствует аргумент требуемый формальному параметру?

Как правильно вводить данные в аргумент Метода Func в массив numbers что бы метод выполнялся?

using System;
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {

            void Func(int[] numbers,int L, int R)
            {
                int  middle, I, J, F, Z;
                
                I = L; J = R;
                middle = (L + R) / 2;
                do
                {
                    do
                    {
                        F = 0;
                        if (numbers[I] < numbers[middle]) F = -1;
                        if (numbers[I] > numbers[middle]) F = 1;
                        if (F > 0) I = I + 1;
                        Console.WriteLine(I);

                    }
                    while
                    (F < 0);
                    do
                    {
                        F = 0;
                        if (numbers[J] < numbers[middle]) F = -1;
                        if (numbers[J] > numbers[middle]) F = 1;
                        if (F > 0) J = J + 1;
                        Console.WriteLine(J);
                    }
                    while
                    (F < 0);
                    if  (I <= J)
                    { 
                        Z = numbers[I]; numbers[I] = numbers[J]; numbers[J] = Z;
                    }
                }
                while
                (I <= J);
                if (L < J) Func(numbers, L, J);
                 else if (I < R) Func(numbers, I, R);
            }
            Func(numbers,15, 10);
        }
    }
} 

Ответы (1 шт):

Автор решения: Yaroslav

Ошибки в ideone.com сыпятся потому что у тебя метод Func внутри метода Main.

Банальная проверка аргументов с выдачей в консоль все показывает.

namespace ConsoleApp1 {

    class Program {

        private static void Main (string[] args) {
            Func(new[] { 1, 2, 3 }, 5, 2);
        }

        private static void Func (int[] numbers, int l, int r) {
            if (l < 0 || l >= numbers.Length) {
                Console.WriteLine("Fail. L["+l+"] is out of numbers array lenght["+numbers.Length+"]");
                return;
            }
            if (r < 0 || r >= numbers.Length) {
                Console.WriteLine("Fail. R["+r+"] is out of numbers array lenght["+numbers.Length+"]");
                return;
            }
            // Нет смысла их объявлять через запятую без значений, если в следующей же строчке ты присваиваешь им всем значения. 
            int Middle = (l+r)/2;
            int I = l;
            int J = r;
            // в do-whilr (I <= J) нет смысла.
            // в конце этого цикла if с тем-же условием которое меняет их местами и оно на 1 раз, не подразумевающее цикличность.
            // А если они ровны цикл безконечен.

            // в do-whilr (F < 0) для I нет смысла.
            // if numbers[I] < numbers[Middle] или если ==(не обрабатывается), ничего не меняет и происходит бесконечный цикла.
            // только (numbers[I] > numbers[Middle]) увеличива I на 1 и выходит из цикла.
            if (numbers[I] > numbers[Middle])
                I++;
            // c J тоже самое.
            if (numbers[J] > numbers[Middle])
                J++;
            // какой смыл менять их местами если I == J? 
            // это один и то-же индекс. только <.
            if (I < J) {
                int Temp = numbers[I];
                numbers[I] = numbers[J];
                numbers[J] = Temp;
            }
            if (l < J)
                Func(numbers, l, J);
            else if (I < r)
                Func(numbers, I, r);
        }
    }
}

Output:

Fail. L[5] is out of numbers array lenght[3]

Это не все ошибки. Обратил внимание только на поверхностное безумие. Вряд ли эта рекурсивная сортировка работает.

→ Ссылка