2015-09-03 37 views
-1

(請注意,n1和它們是否素N2可以包含在陣列中)此外,數組中的素數需要按升序排列。鑑於兩個數字N1和N2作爲輸入,返回一個包含所有N1和N2之間的質數的數組

public int[] getPrimes(int start,int stop){ 

     int flag=0; 
     int k=0; 
     int arr[] =new int[stop-start]; 

     if(start==1){ 
     for(int i=start+1; i<=stop; i++){  
     flag=0; 
     for(int j=2; j<=i/2; j++) 
     { 
     if(i%j==0) 
     { 
      flag=1; 
      break; 
     } 
     } 
     if(flag==0){ 
     arr[k]=i; 
     k++; 
     } 

     } 
    } 

     else{ 
     for(int i=start; i<=stop; i++){  
     flag=0; 
     for(int j=2; j<=i/2; j++) 
     { 
     if(i%j==0) 
     { 
      flag=1; 
      break; 
     } 
     } 
     if(flag==0){ 
     arr[k]=i; 
     k++; 
     if(k+1==0) 
     break; 
     } 

     } 
    } 
    return arr; 

    } 

測試用例參數

'1' '20' 

Testcase Expected Answer 

{2,3,5,7,11,13,17,19} 

My Answer 

{2,3,5,7,11,13,17,19,0,0,0,0,0,0,0,0,0,0,0} 

我的回答不能限制陣列,任何建議嗎?如果可以優化我的代碼而不使用任何數組函數?

+0

修整全零。 – Rustam

回答

1

嘗試返回修剪數組:

return Arrays.copyOf(arr, k); 

,而不是

return arr; 
+0

,我是新的Java陣列不太熟悉使用修剪,你能幫我一把。 –

+0

在你的'getPrimes'方法變化'而歸arr''返回Arrays.copyOf(ARR,K);'就只返回K參數 – Rustam

+0

_我需要導入任何圖書館嗎?因爲它顯示我錯誤找不到符號 return Arrays.copyOf(arr,k); –

2

在這一行:int arr[] =new int[stop-start];你給輸出數組的大小爲19(在你的例子),但問題是你不知道這兩個指標之間有多少素數。

在詮釋的數組的缺省值是0,因此,所有未使用的索引的陣列中的被分配給這個值。

我的建議是使用而不是一個ArrayList<Integer>,而不是一個標準的數組,因爲它的規模膨脹,並在必要時。

0

int []arr = new int[num2-num1];//an array of relatively a larger size for(int i=num1;i<=num2;i++){ for(int j=2;j<i;j++){ result = i%j;//this will calculate the modulus if(result==0)//yes then the number is composite break; } //this says that loop has executed i-1 times but factor not found if(result!=0){ arr[count] = i; count++; } }

你應該已經添加了一些評論對我們理解你的代碼,不過試試這個邏輯,這將劃分任意數量從2到(數1)如果是素數,那麼它必須得到被分割

我們解決打印問題限制從你的陣列(0計數)或至 陣中擁有的價值和打印陣列。

+0

如果測試用例以1開頭,則代碼將不會運行。 –

相關問題