我如何调用此方法.+检查我的方法是否正确
本文关键字:我的 检查 方法 是否 此方法 何调用 调用 | 更新日期: 2023-09-27 18:25:44
昨晚我问了这个问题。。此链接成员们回答了我(谢谢)我有另一种方法,让我觉得自己有问题。。
我会提出两种方法。。第二个是我所问的。。
public static bool ISprime(int prime)
{
if (prime < 2 )
return false;
else if (prime == 2)
return true;
else
{
for (int i = 2; i < prime; i++)
{
if (prime % i == 0)
return false;
}
return true;
}
}
// second method
public static int[] GeneratePrimes(int[] n)
{
int[] array = new int[n.Length];
int PrimeLength =0;
for (int i = 0; i < n.Length; i++)
{
if (ISprime(array[i]))
PrimeLength++;
}
int[] arprime = new int[PrimeLength];
for (int i = 0, j=0; i< PrimeLength; i++)
{
if (ISprime(i))
arprime[j++] = i;
}
return arprime;
}
- GeneratePrimes这个方法正确吗。。我想把所有素数放在一个叫做arprime的数组中
- 在汇编/程序中,我怎样才能传递一个数字。。该用户类型类似于
Console.ReadLine()
感谢
不确定您的方法是否有效,但回答问题的第二部分:
string s = Console.ReadLine();
int n = Convert.ToInt32(s);
int[] arprimes = GeneratePrimes(n);
可能最好尝试一下转换位,因为用户可以输入非数字的内容。
编辑:事实上,我会把方法改为GeneratePrimes(int n),而不是GeneratePrimens(int[]n)——你不需要传递一个数字数组,只需要传递它返回数组时的数字。
另一个编辑:这里是您的方法更改,因此您传递的是int,而不是int数组。但仍不确定该方法是否真的有效。
public static int[] GeneratePrimes(int n)
{
int[] array = new int[n];
int PrimeLength =0;
for (int i = 0; i < n; i++)
{
if (ISprime(array[i]))
PrimeLength++;
}
int[] arprime = new int[PrimeLength];
for (int i = 0, j=0; i< PrimeLength; i++)
{
if (ISprime(i))
arprime[j++] = i;
}
return arprime;
}
这是你想要的主要方法
public static void Main(I cannot remember what goes here!)
{
string s = Console.ReadLine();
int n = Convert.ToInt32(s);
int[] arprimes = GeneratePrimes(n);
string output = "";
for (i=0; i<arprimes.Length;i++)
{
output += arprimes[i].ToString() + ", ";
}
output = output.Remove(output.Length - 3, 2);
Console.WriteLine(output);
}
如果你需要从1到n的所有素数,你需要这样的东西:
int[] GeneratePrimes(int n)
{
List<int> primes = new List<int>();
for (int i=1; i<=n i++)
{
if (IsPrime(i))
{
primes.Add(i);
}
}
return primes.ToArray();
}
但这种算法并不有效。请参阅:http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes另外还有另一种更有效的筛子。
上升如果你需要前n个素数,那么你需要做这样的事情:
int[] GeneratePrimes(int n)
{
List<int> primes = new List<int>();
while (primes.Length < n)
{
if (IsPrime(i))
{
primes.Add(i);
}
}
return primes.ToArray();
}
为了回答您的第一个问题,我的理解是GeneratePrimes()
将返回一个数组,该数组仅包含作为参数提供的数组中的素数。
您的方法将不起作用,因为if (ISprime(array[i]))
将始终失败,因为"array
"没有为其分配任何值。您必须改用if (ISprime(n[i]))
。
但是,您也可以避免两个循环执行相同的任务。以下代码可能会帮助您:
public static int[] GeneratePrimes(int[] n)
{
List<int> primeList = new List<int>();
for (int i=0; i<n.Length; i++)
{
if(isprime(n[i]))
primeList.Add(n[i]);
}
return primeList.ToArray();
}
答案1:你能做的是:
enter code here
public static int[] GeneratePrimes(int[] n)
{
int[] array = new int[n.Length];
int[] arprime = new int[n.Length];
int PrimeLength =0;
int j=0;
for (int i = 0; i < n.Length; i++)
{ if (ISprime(array[i]))
{
PrimeLength++;
arprime[j++]=array[i];
}
}
Array.Resize(ref arprime, PrimeLength);
return arprime;
}
答案2:
在命名空间中包括该程序集
AssemblyName.ClassName.MethodName(Int.Parse(Console.ReadLine()))//对于传递整数数据,otherwize不要强制转换