2014-05-18 8 views
0

我使用getPrime()怎麼做我的Java方法還真的時候才發現數組元素的索引是素數

和我getPrime()方法類似

void getSumAtPrime(int[] n, int n_limit){ 

System.out.println("limit:"+n_limit); 
for(int j=0; j<n_limit; j++){ 

if(getPrime(j)){ 

System.out.println(n[j]); 
} 
} 

Java方法,它將打印素索引數組元素就像

boolean getPrime(int numi){ 

boolean flag=false; 
for(int i=2;i<numi;i++){ 
    if(numi%i==0) { 
flag = true; 
break; 
} 
} 
return flag; 
} 

但現在它只是從5打印數字,例如,如果我輸入1,2,3,4,5,6,7,8,9它將打印5,7,8。我無法找到問題,有人請幫我解決這個

+1

當您嘗試調試程序時會發生什麼?我不確定您是否使用了'getPrime'方法。它似乎返回true,表示數字不是素數,但是您考慮反數。 –

+0

請注意,您正在打印一些索引而不是* prime *數字。 – Maroun

+0

@MarounMaroun雅我打印一些指標,但它是從5開始爲什麼? – user3649895

回答

0
boolean getPrime(int p){ 
if(p < 2) return false; 
if(p == 2 || p == 3) return true; 
if(p % 2 == 0) return false; 

    for(int i = 3; i <= Math.ceil(Math.sqrt(p)); i += 2){ 
    if(p % i == 0) { 
     return false; 
    } 
    } 
    return true; 
} 
+0

'如果它在該陣列中的索引是素數' –

+0

對不起,我看不到我的壞。 – user3152069

0

試試這個:

void getSumAtPrime(int[] n, int n_limit) { 
    System.out.println("limit:"+n_limit); 
    for(int j=0; j < n_limit; j++) { 
    if(getPrime(j)) 
     System.out.println(j + " : " + n[j]); 
    } 
} 



boolean getPrime(int numi) { 
    if (n < 2) return false;  
    for(int i=2; i < numi; i++) 
    if(numi%i==0) return false; 
    return true; 
} 
0

你的問題是,爲什麼你得到5作爲第一輸出。

那麼因爲在你的getPrime方法中,你正在檢查if(numi%i==0)。對於2,4,6和8,這將是正確的。

現在,在您的for循環中您有for(int i=2;i<numi;i++){,因此「2」不符合i<num1檢查。

因此,我們得到4,6,8個指標,該方法返回true。

現在,要打印N [j]時,這樣就可以獲得

N [4] = 5 N [6] = 7 N [8] = 9

什麼是現在關注?

P.s我剛纔回答了這個疑問。無論你正在做什麼, 是否正確,在這裏是超出範圍。

0
void getSumAtPrime(int[] n, int n_limit){ 

System.out.println("limit:"+n_limit); 
for(int j=0; j<n_limit; j++){ 

if(getPrime(j)){ 

System.out.println(n[j]); 
} 
} 
//method to get prime or not 
public boolean getPrime(int numi){ 
     int i, res; 
     boolean flag=true;  
     for(i=2;i<=numi/2;i++) 
     { 
      res=numi%i; 
      if(res==0) 
      { 
       flag=false; 
       break; 
      } 
     } 
     return flag; 
} 
相關問題