2015-10-05 25 views
-5

我應該評估一個整數數組並確定它們是否爲素數。一旦我這樣做了,我必須返回(主要)一組布爾值。整數數組素數到布爾數組

public static boolean [] Advanced_7(int Array []){ 

    boolean [] verdict = new boolean [Array.length]; 

    for(int i = 0; i < Array.length; i++) 
    { 
     verdict[i] = true; 

     for(int j = 2; j <= Array[i]; j++) 
     { 
      if (Array[i] % j == 0) 
      { 
       verdict[i] = false; 
      } 
     } 
    } 

    return verdict; 
} 
+0

什麼語言是什麼? – njzk2

+0

如果你不能解釋**如何**這個代碼不起作用,我們不能困擾嘗試和猜測問題可能是什麼。 –

+0

這可能是c# –

回答

1

只是一些一般的提示:

第一:你正在檢查閹了許多的辦法是質不是可以簡化;你只需要檢查元素一半你正在檢查的整數。

第二:一旦你知道這個數字是非素數,爲什麼你繼續檢查?一旦知道號碼是非素數,就打破for循環。第三:爲了將結果輸出到控制檯,你不能簡單地打印對象(一個數組就是一個對象,所以打印的任何東西都可能看起來很奇怪)。在您的main過程中,將結果存儲在一個變量中,並使用for循環打印每個條目。


正如評論中所述,您應該使用Java命名約定。下面的代碼是對原始代碼的重寫,使用這些約定並應用我上面給出的建議。

public static boolean[] checkForPrimes(int[] numbers) { 
/* 
    The name for the function should be a verbe, and start 
    with a lower case letter. 
    The input parameter for the function is an object, and 
    must also start with a lower case letter. 
*/ 
    boolean[] veredict = new boolean[numbers.length]; 
    for(i = 0; i < numbers.length; i++) { 
     veredict[i] = true; 
     // You only need to check up to half each number 
     for(j = 2; j <= numbers[i]/2; j++) { 
      if(numbers[i] % j == 0) { 
       veredict[i] = false; 
       break; // once you know the number is non-prime 
         // exit the loop 
      } 
     } 
    } 
    return veredict; 
} 
public static void printResult(int[] numbers) { 
    boolean[] veredict = checkForPrimes(numbers); 
    // You must traverse the arrays to print them out: 
    for(i = 0; i < numbers.length; i++) { 
     System.out.println(numbers[i] + " " + veredict[i]); 
    } 
} 
+0

:實際檢查到平方根就足夠了 – Henry

+0

@Henry事實上......但我們只用簡單的操作來保持簡單;) – Barranka

0

以下包含了一些無法解釋的更改。 如果你可以解釋他們,使用它們。

int element = Array[i]; 
verdict[i] = element % 2 == 0; 
if (verdict[i]) 
{ 
    for (int j = 3; j <= element/2; j += 2) 
    { 
     if (element % j == 0) 
     { 
      verdict[i] = false; 
      break; 
     } 
    } 
} 

對於快速打印,您可以使用:

System.out.println(Arrays.toString(verdict)); 
+0

'for(int j = 3; j * j <= element; j + = 2)'更快。 – Henry

+0

@Henry確實好多了,最好'j <=元素的平方根'不幸的不是原始可用。對於那些想要實驗的人:for(int j = 3,qj = 9; qj <= element; j + = 2,qj + =(j-1)<< 2)'。 _Cryptoprogramming沒有獲得學分!_ –