C# 为什么会出现这样的错误:不是所有的代码路径都返回一个值?

C# 为什么会出现这样的错误:不是所有的代码路径都返回一个值?,c#,.net,visual-studio-2005,console-application,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 isHodd

嗨,我是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;
                    }
                }
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用系统文本;
名称空间霍德尔
{
班级计划
{
公共静态void Main()
{
isHodder(3);
}
静态整数isHodder(整数n)
{
int k=n;
对于(int i=2;i第一个错误,“并非所有代码路径都返回值”意味着代码可以遵循一条路径,而该路径不会返回任何值(即:调用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;
    }
static int-isHodder(int-n)
{
int k=n;

对于(int i=2;i这条线非常可疑:

if ((n % 1) == 0)

如果我调用
isHodder(1)
,会发生什么情况?我到达哪个返回语句


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

@jalf:对于2的情况是正确的,对于这个问题,如果函数没有返回任何值,则必须使用void,否则必须在函数末尾定义一个返回值。

对k=(2^j)的捕捉很好-1、 ,我想你是在OP添加错误消息之前得到的。我只注意到返回…@Lefty,虽然我认为你的编辑事实上是正确的,但我认为影响更改的意义不应该是编辑,而应该是要求作者修复的注释。我认为在函数末尾只有一个返回语句是一个很好的做法。e便于读取和调试。
if ((n % 1) == 0)
if ((n % i) == 0)