我如何调用此方法.+检查我的方法是否正确

本文关键字:我的 检查 方法 是否 此方法 何调用 调用 | 更新日期: 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;
    }
  1. GeneratePrimes这个方法正确吗。。我想把所有素数放在一个叫做arprime的数组中
  2. 在汇编/程序中,我怎样才能传递一个数字。。该用户类型类似于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不要强制转换