2011-11-26 125 views
1

我想寫一個java程序,它確定如果一個數組的所有元素是質數。這裏是我的代碼:確定是否所有元素的數組是素數

boolean allPrimes(int[] ade){ 
     int i = 0; //counter 
     boolean Prime = true; //initial boolean value 
     while (i<ade.length && !Prime){ 
      if (p.isPrime(ade[i])) //function which determines if an int is prime. 
       Prime = true; 
      else 
       Prime = false; 
      i=i+1; 
      } 
     return Prime; 
    } 

我不認爲這是正確的,因爲我做了一些測試,他們失敗了。我究竟做錯了什麼?感謝

+0

wouldnt it'while(i

+0

它是http://stackoverflow.com/questions/8114442/error-with-repetition-which-i-cant-spot – jjcastil

回答

4

您初始化布爾總理這樣

boolean Prime = true; 

這意味着你永遠不會同時進入循環!請將其初始化爲'false'。 如果你的作業也放錯了位置。

爲您的代碼工作 - 只需從

while (i<ade.length && !Prime)

改變,而你的第二個條件

while (i<ade.length && Prime)

+0

我前一陣子試過,但它似乎在我做的測試中失敗。 – jjcastil

+0

@Darkkurama你能告訴我們失敗的測試用例和isPrime方法嗎? –

+0

測試是這樣的: '布爾test1AllPrimes = allPrimes(ade_1)== true; \t boolean test2AllPrimes = allPrimes(ade_2)== false; \t布爾test3AllPrimes = allPrimes(ade_3)== false; \t布爾testAllPrimes = \t \t \t test1AllPrimes && \t \t \t test2AllPrimes && \t \t \t test3AllPrimes;' 其中ade_1,ade_2和ade_3是: '靜態INT [] ade_1 = {2,3,5}; static int [] ade_2 = {1,4,8,12}; 靜態INT [] ade_3 = {1,2,3,4};!' – jjcastil

1

Prime變量初始化爲真,在while條件!Prime意味着假。 你的while循環不執行並且蒸發線返回true。

0

你永遠不會進入while循環,因爲Prime = true;,你早已while(i<ade.length && !Prime)檢查,這意味着while (true && false)(假設ade都會有它的一些值)

2

不要在一個變量的值存儲在所有。做循環並在你找到的第一個非素數值上返回false(如果你發現了一個不是,沒有進一步的點處理,它們不能都是素數),然後在循環後返回true(如果你得到在那裏,他們都是素數)。什麼johnbk

for (int i : ade) { 
    if (!p.isPrime(i)) { 
     return false; 
    } 
} 
return true; 
+0

這似乎是「效率」方面的最佳方式。事情是,當我嘗試運行程序時,它會凍結控制檯,並在10秒後返回輸出(主體中的布爾測試),爲什麼會發生這種情況? – jjcastil

+0

我不知道。我寫在那裏的代碼應該很快,除非p.isPrime需要很長時間。你總是可以做'int i = 0;我 Thor84no

1

大廈說:

boolean allPrimes(int[] ade){ 
     int i = 0; //counter 
     boolean Prime = true; //initial boolean value 
     while (i<ade.length){ 
      if (!p.isPrime(ade[i])) { //function which determines if an int is prime. 
       Prime = false; 
       break; 
      } 
      i=i+1; 
     } 
     return Prime; 
} 

這應該很好地工作。當你發現一個不是素數的數字時,循環遍歷數組,將Prime設置爲false並跳出循環。

+0

你不會在while循環的條件下評估'Prime',所以你甚至不需要它,只是從循環中斷開 –

1

我不是一個Java傢伙,但在我看來,你對Prime的初始值應該是假的,不是真的,否則你永遠不會進入你的while循環。

相關問題