2012-02-23 47 views
0

昨晚我问这个问题.. this link 和成员回答了我(感谢) 我有另外一个方法,让我像我有问题它..我如何可以调用此方法.. +检查,如果我的方法正确与否

我把2种方法..第二个是我问..

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()

用户类型谢谢

+0

你能解释你的第二种方法应该做什么?我现在看到的是,你有一个长度为n.Length的数组,填充零。在下一个循环中,您通过调用ISprime()来检查每个元素(零) – Archeg 2012-02-23 11:03:27

+0

'创建一个名为“GeneratePrimes”的方法 IN:数组大小,n OUT:数组填充前n个素数 创建规定及与质数 填补大小的数组'那是我从第二个方法.. – 2012-02-23 13:13:37

回答

0

不知道你的方法将工作,但在回答你问题的第二部分:

string s = Console.ReadLine(); 
int n = Convert.ToInt32(s); 
int[] arprimes = GeneratePrimes(n); 

可能最好把转换位试一试,因为用户可以输入一些不是数字的东西。

编辑:其实,我会改变方法为GeneratePrimes(int n)而不是GeneratePrimes(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); 
} 
+0

使用'int.TryParse',而不是尝试捕捉 – V4Vendetta 2012-02-23 11:01:36

+0

需要,所以我怎么能叫它组装? 'string s = Console.ReadLine(); int n = Convert.ToInt32(s); int [] arprimes = new int [n]; Console.WriteLine(ClassLibrary1.Class1.GeneratePrimes(****));'在星星我可以放什么? – 2012-02-23 11:08:05

+0

我不认为它会像你期望的那样工作。 WriteLine将期待一个字符串。您还需要使用'int [] arprimes = ClassLibrary1.Class1.GeneratePrimes(n);'来创建数组。 – Andrew 2012-02-23 11:15:05

0
如果你需要将所有的素数从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(); 
} 

但是这个algorythm是无效的。看到这个:http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes还有另一个筛子,更有效。

Upd。如果你需要前n个质数,那么你需要做这样的事情:

int[] GeneratePrimes(int n) 
{ 
    List<int> primes = new List<int>(); 

    while (primes.Length < n) 
    { 
     if (IsPrime(i)) 
     { 
     primes.Add(i); 
     } 
    } 

    return primes.ToArray(); 
} 
+0

感谢名单Archeg ..这一联系是ü给我帮我安排我的方法..但我想要做的是'reate一个名为“GeneratePrimes” 在方法:数组的大小,正 OUT:阵列填充前n素数 创建指定大小的数组并填充素数# – 2012-02-23 11:24:57

+0

如果我将List更改为数组,那么该怎么办?那会适合吗? – 2012-02-23 11:39:56

+0

不,你不知道你需要产生多少个素数 – Archeg 2012-02-23 12:37:31

0

要回答你的第一个问题,我的理解是,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(); 
} 
+0

thnx ..但是我怎样才能从程序集中调用它?像'classlibrary.class1.generatePrimes(**我们能怎么把这里**);' – 2012-02-23 11:46:44

0

答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 dont cast

+0

我得到了2个错误:(如果我键入'字符串s =到Console.ReadLine(); Console.WriteLine(ClassLibrary1.Class1。 GeneratePrimes(int.Parse(S)));''**错误\t \t 2参数1:不能从 'INT' 转换为 'INT []' **'和'错误\t \t 1为'最好重载方法匹配ClassLibrary1.Class1.GeneratePrimes(int [])'有一些无效参数' – 2012-02-23 12:59:25

+0

GeneratePrimes方法接收一个整数数组而不是一个整数,在调​​用它时在方法中传递一个完整的数组。 – 2012-02-24 13:36:49

相关问题