2012-02-23 48 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

相關問題