我的计划出了什么问题?
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
bool check = isPowerOfTwo(255);
Console.WriteLine(check);
Console.ReadKey();
}
public bool isPowerOfTwo (uint x)
{
while (((x % 2) == 0) && x > 1)
{
x /= 2;
}
return (x == 1);
}
}
}
我收到了错误
非静态字段,方法或属性需要对象引用。
答案 0 :(得分:5)
使方法isPowerOfTwo
静态:
public static bool isPowerOfTwo (uint x)
方法Main
是静态的,因此您只能在其中调用同一类的静态方法。但是,当前isPowerOfTwo
是一个实例方法,只能在Program
类的实例上调用它。当然,您也可以在Program
内创建Main
类的实例并调用它的方法,但这似乎是一个开销。
答案 1 :(得分:2)
除了指出该方法应该是静态的,可能值得知道一种更有效的方法来确定一个数是否是2的幂,使用位算术:
public static bool IsPowerOf2(uint x)
{
return (x != 0) && (x & (x - 1)) == 0;
}
答案 2 :(得分:1)
您有2个选项;
让您的isPowerOfTwo
方法static
赞成;
public static bool isPowerOfTwo(uint x)
{
while (((x % 2) == 0) && x > 1)
{
x /= 2;
}
return (x == 1);
}
或者创建一个类的实例,然后调用你的方法;
class Program
{
static void Main(string[] args)
{
Program p = new Program();
bool check = p.isPowerOfTwo(255);
Console.WriteLine(check);
Console.ReadKey();
}
public bool isPowerOfTwo(uint x)
{
while (((x % 2) == 0) && x > 1)
{
x /= 2;
}
return (x == 1);
}
}
答案 3 :(得分:1)
你忘了静......
public static bool isPowerOfTwo (uint x)