【问题标题】:Not all codepaths return a value Error并非所有代码路径都返回值错误
【发布时间】:2013-07-01 18:20:39
【问题描述】:

我正在尝试创建一个简单的程序来查找数组中的最大数。我在一个单独的类文件中创建了该方法,然后只是尝试在主页中创建该对象,并在我创建的数组上执行该方法。我知道这与我目前没有在我的方法上返回值有关,但我仍然卡住了。抱歉这个菜鸟问题,提前谢谢。

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

namespace FindMax
{
    class Program
    {
        public static void Main(string[] args)
        {

            Class1 MyClass = new Class1();

            int[] myArray = new int[] {1, 3, 4, 2, 5, 2, 2, 6, 3344, 223, 35, 5656, 2, 355543, 2222, 2355, 933433};

            int y = MyClass.FindMax(myArray);
            Console.WriteLine(y);
            Console.ReadKey(true);
}}}

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

namespace FindMax
{

    public class Class1
    {
        public int FindMax(int[] array) 
        {
            int temp = array[0];

            for (int i = 0; i < array.Length; i++)
                 {
                if (array[i] > temp)
                {
                temp = array[i];
                }
                }}}}

【问题讨论】:

  • 我在您的 FindMax() 中根本没有看到 return 声明。这可能是一个开始。
  • 您需要在Class1.FindMax末尾添加return temp;
  • 是的,在我班上第二个括号之后的“返回温度”是阻碍我的原因。感谢大家帮助我解决我的菜鸟问题!
  • @user2411290 - 您应该接受以下答案之一。

标签: c# arrays methods return-value


【解决方案1】:

方法签名:

public int FindMax(int[] array)

规定该方法必须返回一个Int32。但是,它不会在任何地方返回任何内容。

您需要在方法的末尾添加一个 return 语句。也许你的意思是:

public int FindMax(int[] array) 
{
   int temp = array[0];

   for (int i = 0; i < array.Length; i++)
   {
      if (array[i] > temp)
      {
         temp = array[i];
      }
   }

   return temp; // <-- Add this
}

我还建议检查以确保 array 参数至少包含一个元素:

if (array == null || array.Length == 0)
   throw new ArgumentNullException("array");

【讨论】:

    【解决方案2】:

    您的FindMax 函数最后一行上方似乎缺少int 的返回值

    实际错误是说您的方法期望返回 int,但您的函数从不返回 returns。

    public int FindMax(int[] array) 
        {
            int temp = array[0];
    
            for (int i = 0; i < array.Length; i++)
             {
                if (array[i] > temp)
                {
                temp = array[i];
                }
             }
       return temp; //this
      }
    

    或者,使用 LINQ,以下将做同样的事情

    var largest = array.OrderByDescending(x => x).FirstOrDefault();
    

    正如@MikeChristensen 指出的那样,array.Max() 也有效。

    var largest = array.OrderByDescending(x =&gt; x).ToList() 你可能会感兴趣,因为它会给你一个列表,你的整个列表会从最大到最小排序

    【讨论】:

    • 好吧,如果您要使用 LINQ,那么只需 array.Max()
    • @MikeChristensen = 哈!很好,不知道那个
    【解决方案3】:

    您永远不会从Class1 中的FindMax 方法返回任何内容。修复它的方法是添加一个return语句:

    public int FindMax(int[] array)
    {
        int temp = array[0];
    
        for (int i = 0; i < array.Length; i++)
            if (array[i] > temp)
                temp = array[i];
    
        return temp; // add the return statement here.
    }
    

    【讨论】:

      【解决方案4】:

      你必须返回一个值

      public class Class1
              {
                  public int FindMax(int[] array) 
                  {
                      int temp = array[0];
      
                      for (int i = 0; i < array.Length; i++)
                           {
                          if (array[i] > temp)
                          {
                          temp = array[i];
                          }
                          }
      
                    return temp;
          }
      
          }
      
          }
      

      【讨论】:

        猜你喜欢
        • 2014-04-16
        • 2015-02-07
        • 2012-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        相关资源
        最近更新 更多