为什么我收到此错误:并非所有代码路径都返回值?

时间:2009-05-30 11:52:04

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

嗨,我是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”

和“检测到无法访问的代码”

5 个答案:

答案 0 :(得分:7)

第一个错误,“并非所有代码路径都返回一个值”意味着代码可以遵循的路径不会返回任何值(即:调用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;
    }

答案 1 :(得分:4)

这条线非常可疑:

if ((n % 1) == 0)

答案 2 :(得分:1)

如果我致电isHodder(1)会怎样?我能找到哪种退货声明?

我们可能根本不会进入for循环(或者如果我们输入它,编译器就不能确定我们在离开循环之前到达return语句。)

答案 3 :(得分:0)

@jff:关于2 <= n / 2(即,4 <= n)的情况是正确的。在这种情况下,您永远不会输入 for 循环,因此您需要在for之后返回。

正如@Kenny建议的那样,

if ((n % 1) == 0)

怀疑。 n%1总是== n,因此当n == 0时条件才会为真。但是,它看起来也可能是一个拼写错误,因为条件不会测试循环内变化的任何内容。你的意思是

if ((n % i) == 0)

答案 4 :(得分:0)

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