C# 无效令牌';布尔';类、结构或接口成员声明中的
我正在尝试构建一个IsPrime(int)函数,无论数字是否为素数,它都会返回true或falseC# 无效令牌';布尔';类、结构或接口成员声明中的,c#,C#,我正在尝试构建一个IsPrime(int)函数,无论数字是否为素数,它都会返回true或false using System; namespace lpn { class LargestPrimeNumber { private bool IsPrime(int n) { if(n < 4) { return true; }
using System;
namespace lpn
{
class LargestPrimeNumber
{
private bool IsPrime(int n)
{
if(n < 4)
{
return true;
}
for(int i = 0; i * i < n; i++)
{
if(n % i == 0)
{
return false;
}
}
return true;
}
static void Main(string[] args)
{
int n = 1;
while(true)
{
if(IsPrime(n))
{
Console.WriteLine(n);
}
n++;
}
}
}
}
使用系统;
名称空间lpn
{
类最大素数
{
私人楼宇iPrime(int n)
{
if(n<4)
{
返回true;
}
对于(int i=0;i*i
当我试图编译它时,我得到以下消息:
cs(7,17):错误CS1519:类、结构或接口成员声明中的令牌“bool”无效
尝试在iPrime中使用“static”关键字
private static bool IsPrime(int n)
{
if(n < 4)
{
return true;
}
for(int i = 0; i * i < n; i++)
{
if(n % i == 0)
{
return false;
}
}
return true;
}
私有静态bool IsPrime(int n)
{
if(n<4)
{
返回true;
}
对于(int i=0;i*i
您提供的代码段返回的错误与您在问题中陈述的错误不同。因此,我将确保所有大括号正确对齐,因为您可能有太多大括号
从您在问题中提供的代码片段中,我将陈述您可能希望进行的以下观察和改进
您可以使iPrime方法静态
,这意味着您不需要LargestPrimeNumber
类的实例来访问该方法
您还可以创建LargestPrimeNumber
类的新实例,并通过新实例访问IsPrime方法,例如:
LargestPrimeNumber lpn = new LargestPrimeNumber();
int numberOfIterations = 10;
while (n < numberOfIterations)
{
if (lpn.IsPrime(n))
{
Console.WriteLine(n);
}
n++;
}
我已经包括了你的程序的修改版本 这将解决的错误包含消息“非静态字段、方法或属性'LargestPrimeNumber.IsPrime(int)'需要对象引用”。不确定作者为什么会得到不同的结果,因为我无法重现他们的错误。@BACON我自己尝试过,这段代码和错误就是您所说的,但我不知道他使用的是哪种类型的编译器。我得到错误消息的唯一方法是,如果我将方法签名更改为类似
private void bool IsPrime(int n)
或private int bool IsPrime(int n)
,使bool
多余。你确定你在这里发布的代码与你正在编译的代码相同吗?您能否尝试将代码从这里复制回您的代码文件,以确保原始代码中没有隐藏字符?我认为您的第一次迭代将尝试除以0。在2tanks@BACON处开始循环以获取提示。我关闭并重新打开了源文件,发现它没有正确保存。我复制了上面的代码,它成功了(除了除法为0之外);您的程序将其标识为素数。在解决第一个循环问题后,i
必须从2开始,您还有第二个问题。是9素数吗?关于9的素性,你的程序怎么说?
for (int i = 0; i * i < n; i++)
{
if (n % i == 0)
{
return false;
}
}