Как отобразить порядковый номер, если переменная находится вне основного метода - PullRequest
0 голосов
/ 23 мая 2018

Редактировать: Что бы вы сделали, если в методе есть две или более функций.у меня проблема с тем, что мне нужно вернуть несколько переменных из метода maxminavg, и я не знаю, как сделать так, чтобы каждая новая переменная переносила значение из метода maxminavg в основной метод.

static void Main(string[] args)
    {
        double max = 0d;
        double sum = 0d;
        double min = arr[0];
        double avg = sum / arr.Length;
        double avgrnd = Math.Round(avg, 2);
        int index1 = 0;
        int index2 = 0;
        int index3 = 0;

        string[] txt = File.ReadLines(@"c: \Users\Stark\Moisture_Data.txt").ToArray();
        double[] arr = txt.Select(Double.Parse).ToArray();

        print(arr);
        Console.WriteLine();
        maxminavg(arr, sum, max, min, avg);
        Console.WriteLine();
        Index(arr, max, min, avgrnd, index1, index2, index3);
        Console.ReadLine();
    }

    public static void maximinavg(double[] arr, double sum, double max, double min, double avg)
    {
        for (int i = 0; i < arr.Length; i++) {
            sum += arr.Length;
            if (max < arr[i]) {
                max = arr[i];
            }
            if (min > arr[i]) {
                min = arr[i];
            }
        }
        avg = sum / arr.Length;

        Console.Write("\nMaximum value in array: {0}, Mimimum value {1}, average value {2}", max, min, avg);
    }

    public static void Index(double[] arr, double max, double min, double avgrnd int index1, int index2, int index3)
    {
        for (int i = 0; i < arr.Length; i++)
        {
            if (max == arr[i])
            {
                index1 = i;
            }
            if (min == arr[i])
            {
                index2 = i;
            }
            if (avgrnd == arr[1])
            { 
                index3 = i;
            }
        }
        Console.Write("\nMax index {0}, Min index {1}, avg index {2}", index1, index2, index3);
    } 

Ответы [ 2 ]

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

Область действия переменных, используемых в функции, ограничена только этой функцией.Таким образом, вы должны вернуть значение max, как предложено sjdm.

Другой способ сделать это - использовать ключевое слово ref.например,

В основном методе:

max = максимум (arr, sum, ref max);

Подпись максимального метода:

public static void максимум(double [] arr, double sum, ref double max)

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

Почему вы не возвращаете результат функции в переменную max?

Я бы рекомендовал не использовать функции void и возвращать результат функции прямо в переменную, как показано ниже.

static void Main(string[] args)
{
    double max = 0d;
    double sum = 0d;
    int index = 0;

    string[] txt = File.ReadLines(@"c: \Users\Stark\Moisture_Data.txt").ToArray();
    double[] arr = txt.Select(Double.Parse).ToArray();

    print(arr);
    Console.WriteLine();
    max = maximum(arr, sum, max);
    Console.WriteLine();
    Index(arr, max, index);
    Console.ReadLine();
}

public static double maximum(double[] arr, double sum, double max)
{
    for (int i = 0; i < arr.Length; i++) {
        sum += arr.Length;
        if (max < arr[i]) {
            max = arr[i];
        }
    }
    Console.Write("\nMaximim value in array: {0}", max);
    return max;
}

public static void Index(double[] arr, double max, int index)
{
    for (int i = 0; i < arr.Length; i++)
    {
        if (max == arr[i])
        {
            index = i;
        }
    }
...