【问题标题】:Why am I getting this error: not all code paths return a value?为什么会出现此错误:并非所有代码路径都返回值?
【发布时间】:2010-10-30 02:23:29
【问题描述】:

您好,我是 C# 新手,正在尝试编码但出现错误 谁能帮我解决一下我做错了什么?

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

namespace hodder
{
    class Program
    {
        public static void Main()
        {
            isHodder(3);
        }

        static int isHodder(int n)
        {
            int k = n;
            for (int i = 2; i <= n / 2;i++ )
            {
                if ((n % 1) == 0)
                {
                    return 0;
                }
                else
                {
                    for (int j = 2; j <= k;j++ )
                    {
                        if (n == (2^ j)  - 1)
                        {
                            return 1;
                        }
                        else
                        {
                            return 0;
                        }
                        k=(2^j)-1;
                    }
                }
            }
        }
    }
}

我在“static int isHodder(int n)”'hodder.Program.isHodder(int)'上遇到错误:并非所有代码路径都返回值

和“k=(2^j)-1”上的“检测到无法访问的代码”

【问题讨论】:

  • 我认为在函数末尾只有一个 return 语句是一种很好的做法。更易于阅读和调试。

标签: c# .net visual-studio-2005 console-application


【解决方案1】:

对于这个问题,如果你的函数没有返回任何值,你必须使用 void,否则你必须在函数的末尾定义一个返回值。

【讨论】:

    【解决方案2】:

    @jalf:关于 2 for 循环,因此您需要在 for 之后返回。

    正如@Kenny 建议的那样,

    if ((n % 1) == 0)
    

    有嫌疑。 n % 1 总是 == n,所以只有当 n == 0 时条件才会成立。但是,这看起来也可能是一个错字,因为条件不会测试循环内变化的任何内容。你是说

    if ((n % i) == 0)
    

    ?

    【讨论】:

    • @Lefty 虽然我认为您的编辑实际上是正确的,但 IMO 影响更改的这种含义不应该是编辑,而是要求作者修复的评论。
    【解决方案3】:

    如果我拨打isHodder(1) 会发生什么?我要达到哪个退货声明?

    我们可能永远不会进入 for 循环(或者如果我们确实进入了它,编译器无法确定在我们离开循环之前我们是否到达了 return 语句)。

    【讨论】:

      【解决方案4】:

      这条线很可疑:

      if ((n % 1) == 0)
      

      【讨论】:

        【解决方案5】:

        第一个错误“并非所有代码路径都返回值”表示代码可以遵循的路径不会返回任何值(即:调用 isHodder(1))。您需要在 for 循环之外返回一些值。此外,由于您在第二个 for 循环中有一个 if/else 块,因此该行

        k=(2^j)-1;
        

        永远不会被执行。

            static int isHodder(int n)
            {
                int k = n;
                for (int i = 2; i <= n / 2; i++)
                {
                    if ((n % 1) == 0)
                    {
                        return 0;
                    }
                    else
                    {
                        for (int j = 2; j <= k; j++)
                        {
                            if (n == (2 ^ j) - 1)
                            {
                                return 1;
                            }
                            else
                            {
                                return 0;
                            }
                            k = (2 ^ j) - 1;
                        }
                    }
                }
                return 0;
            }
        

        【讨论】:

        • 很好地抓住了 k=(2^j)-1;,因为我认为您在 OP 添加错误消息之前就已经知道了。我只注意到返回...
        猜你喜欢
        • 1970-01-01
        • 2013-07-01
        • 2014-04-16
        • 2015-02-07
        • 2012-04-16
        • 1970-01-01
        • 1970-01-01
        • 2016-10-07
        • 1970-01-01
        相关资源
        最近更新 更多