0

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

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

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

4

5 回答 5

6

第一个错误,“不是所有的代码路径都返回一个值”意味着代码可以遵循一个不会返回任何值的路径(即:调用 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;
    }
于 2009-05-30T11:58:42.580 回答
4

这条线是高度怀疑的:

if ((n % 1) == 0)
于 2009-05-30T11:59:25.603 回答
1

如果我打电话会isHodder(1)怎样?我要达到哪个退货声明?

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

于 2009-05-30T13:22:53.080 回答
0

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

正如@Kenny 建议的那样,

if ((n % 1) == 0)

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

if ((n % i) == 0)

?

于 2009-05-30T14:04:08.503 回答
0

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

于 2013-04-04T11:28:51.740 回答