嗨,我是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”上和“检测到无法访问的代码”
答案 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,否则你必须在函数末尾定义一个返回值。