2016-09-30 57 views
0

我正在寫一段代碼,找到總和爲十的倍數的數字,從startend,但我的'我很難找到我的代碼中發現錯誤的錯誤,這些錯誤發現它們和其他不合計爲十倍數的巧妙素數。java找到的數字在一個範圍內的數字增加到10的倍數

void funPrimes(int start, int end) { 
    int ten = 0; 
    for (int n = start; n < end; n++){ 
     int current = n; 
     while (current > 0){ 
      ten += current%10; 
      current=current/10; 
     } 
     if(isPrime(n)&&ten%10==0) println(n); 
    } 
} 
boolean isPrime(int num){ 
    boolean p = true; 
    for(int i = 2; i < num; i++){ 
     if(num%i ==0) return false; 
    } 
    return p; 
} 

例如,如果start = 1end = 2048,那麼就應該被打印出來的唯一數字是19,37,73,127,163,181,271 ...

但是,當我運行代碼,出現的數字是19,47,59,71,79,103,139,179,199 ...

+1

你應該添加一些樣本輸出以顯示您的代碼出錯 – bkennedy

+1

我下載並運行了代碼。我給它開始= 1和結束= 20。打印出來的唯一數字是19.它是如此煩人,當你走出去的方式來幫助別人的問題,事實證明,作者甚至沒有運行自己的代碼用他們自己的例子... – nhouser9

+0

對不起,我只是拿了兩個簡單的數字,從我頭頂上掉下來。如果我使用更大的數字,例如1到2048,那麼唯一的數字應該是19,37,73,109,127等... –

回答

1

問題是你沒有重置變量ten每次循環。這工作:

void funPrimes(int start, int end) { 
    int ten = 0; 
    for (int n = start; n < end; n++) { 
     ten = 0; 
     int current = n; 
     while (current > 0) { 
      ten += current % 10; 
      current = current/10; 
     } 
     if (isPrime(n) && ten % 10 == 0) { 
      System.out.println(n); 
     } 
    } 
} 

在我看來它使代碼更清潔的,如果你還打破了功能,以確定是否一個數是被10整除到它自己的方法:

void funPrimes(int start, int end) { 
    for (int n = start; n < end; n++) { 
     if (isPrime(n) && digitsAddToTen(n)) { 
      System.out.println(n); 
     } 
    } 
} 

boolean isPrime(int num) { 
    boolean p = true; 
    for (int i = 2; i < num; i++) { 
     if (num % i == 0) { 
      return false; 
     } 
    } 
    return p; 
} 

boolean digitsAddToTen(int num) { 
    int digitTotal = 0; 
    while (num > 0) { 
     digitTotal += num % 10; 
     num = num/10; 
    } 
    return (digitTotal % 10 == 0); 
} 
+0

感謝您的答案!我工作,但我想額外的功能是有幫助的,並不複雜,但並不是真的有必要 –

+0

這有些東西應該已經被封閉作爲一個錯字......但是我再也不確定了。 –

+0

@QPaysTaxes隨意投票。我不確定我是否同意或不同意,但總的來說,我不會幫助某人解決他們的問題,然後結束這個問題,因爲這不太可能幫助其他人。 – nhouser9

相關問題