如果变量在main方法之外,如何显示索引号

时间:2018-05-23 03:47:28

标签: c# arrays for-loop double

编辑:如果方法中有两个或更多功能,您需要做什么?我有问题的是,我需要从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 :(得分:2)

为什么不将函数结果返回到变量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;
        }
    }

答案 1 :(得分:0)

函数中使用的变量范围仅限于该函数。所以你应该按照sjdm的建议返回max值。

另一种方法是使用ref关键字。 e.g

主要方法:

max = maximum(arr,sum,ref max);

最大方法签名:

public static void maximum(double [] arr,double sum,ref double max)