我的数组代码的最大最小值不起作用

时间:2015-08-06 22:21:34

标签: c# arrays methods max min

我有这个代码完美,但一旦我开始修复它,它开始给我错误,我不明白如何解决。帮助

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MinMax
{
public class Exercise
{

    public int Min(int[] numbers)
    {
        int m = numbers[0];
        for (int i = 0; i < numbers.Length; i++)
        {
            if (m > numbers[i])
            {
                m = numbers[i];
                return m;
            }
        }

    }

    public int Max(int[] numbers)
    {
        int m = numbers[0];
        for (int i = 0; i < numbers.Length; i++)
        {
            if (m < numbers[i])
            {
                m = numbers[i];
                return m;
            }
        }
    }

    public static int Main()
    {
        int [] nbrs = new int[10];
        Random rnd = new Random();
        int x = 0;
        foreach (int i in nbrs)
        {
            int gen = rnd.Next(1, 501);
            nbrs [x] = gen;
            Console.WriteLine(nbrs [x] + ", ");
            x++;
        };

        Exercise exo = new Exercise();
        Console.WriteLine("The minimum of the array is {0}", exo.Min(nbrs));
        Console.WriteLine("The maximum of the array is {0}", exo.Max(nbrs));
        return 0;
    }
}}

错误'prog.cs(11,20):错误CS0161:MinMax.Exercise.Min(int[])': not all code paths return a value' and 'prog.cs(25,20): error CS0161: MinMax.Exercise.Max(int [])':并非所有代码路径都返回一个值'出现但是我没有了解它是如何正常工作的。

2 个答案:

答案 0 :(得分:1)

更新部分代码:

public int Min(int[] numbers)
{
    int m = numbers[0];
    for (int i = 0; i < numbers.Length; i++)
    {
        if (m > numbers[i])
        {
            m = numbers[i];
        }
    }
    return m;
}

public int Max(int[] numbers)
{
    int m = numbers[0];
    for (int i = 0; i < numbers.Length; i++)
    {
        if (m < numbers[i])
        {
            m = numbers[i];
        }
    }
    return m;
}

编辑:这将帮助您摆脱所获得的错误。但是你仍然需要弄清楚返回正确值的逻辑。

您收到此错误的原因是,如果您传递给方法的数组int[] numbers中没有数字满足if条件if (m > numbers[i]),则代码永远不会到达退货声明。

答案 1 :(得分:1)

我已经用一些解释来评论错误的部分,希望它有所帮助。

public class Exercise
{

    public static int Min(int[] numbers)
    {
        int m = numbers[0];

        // Start at index 1, not 0. m can never be greater than numbers[0].
        for (int i = 1; i < numbers.Length; i++)
        {
            if (m > numbers[i])
            {
                m = numbers[i];

                //return m; // This returns at the first number smaller than numbers[0].
            }
        }
        return m; // return the final result here. `if` statement may never get executed.
        //but the method must return `m` anyway as a result
    }

    public static int Max(int[] numbers)
    {
        int m = numbers[0];

        // Start at index 1, not 0. m can never be less than numbers[0].
        for (int i = 1; i < numbers.Length; i++)
        {
            if (m < numbers[i])
            {
                m = numbers[i];
                //return m; // This returns at the first number larger than numbers[0].
            }
        }
        return m; // return the final result here. `if` statement may never get executed.
        //but the method must return `m` anyway as a result
    }

    public static void Main() // Main method should not return value
    {
        int[] nbrs = new int[10];
        Random rnd = new Random();

        // dont use `foreach` on array when you want to set values to that array.
        // also `for` has a counter itself. remove the x and put it in `for` statement.
        for (int x = 0; x < nbrs.Length; x++)
        {
            int gen = rnd.Next(1, 501);
            nbrs[x] = gen;
            Console.WriteLine(nbrs[x] + ", ");
        }


        //Exercise exo = new Exercise();
        // you dont have to create a new instance of the current class.
        // just use the methods directly but make them static in order to access it.
        Console.WriteLine("The minimum of the array is {0}", Min(nbrs));
        Console.WriteLine("The maximum of the array is {0}", Max(nbrs));
    }
}