2017-02-21 70 views
4

我剛剛啓動java,並編寫了一個用於返回輸入數字因子的簡單程序。有兩個類,一個測試者和一個你在下面看到的類。從java方法中排除特定的整數返回

不幸的是,我的輸出,說,如果我輸入150,是2,3,0,5,5

我知道爲什麼發生這種情況;當局部變量q = i時,我們顯然得到2,3,5,5,但是當第一個if語句中的條件不滿足時,q被讀爲0.

是否有排除特定整數,在這種情況下,0,從輸出?我一直在努力應對幾個小時內容易出現的問題,顯然我沒有看到什麼。

我知道有寫這個程序更簡單的方法,但所有方法都必須保持原樣......

public class FactorGenerator { 

    private int y; 
    private int i; 


    public FactorGenerator(int numberToFactor) 
    { 
     y = numberToFactor; 
     i = 2; 
    } 

    public boolean hasMoreFactors() 
    { 
     if (i <= y) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

    public int nextFactor() 
    { 

     int q=0; 

     if(y % i != 0) 
      i++; 

     if(y % i == 0) 
      { 
       y = y/i; 
       q = i; 
      }   
     return q; 
    } 
} 
+3

你是怎麼完全使用這些方法的? –

+1

您不必排除特定的整數。只需調整你的實現,而不需要你這樣做。此外,預期產出是多少?所有的因素都是150? 1,3,5,10,15,30,50,150? – user3437460

回答

1

快速修復。你需要一個while循環(跳過不明確將您Ÿ所有因素)在這裏:

if(y % i != 0) 
     i++; 

像這樣:

while(y % i != 0){ 
     i++; 
} 
+0

這幫助我理解了while循環和for循環之間的巨大差異!它最終點擊。非常感謝。 – user339872

1

@MicD曾建議正確答案

另一種方式:

由於您有零問題,所以只檢查q不等於零

int nextFactor() 
{ 

    int q=0; 

    if(y % i != 0) 
     i++; 

    if(y % i == 0) 
     { 
      y = y/i; 
      q = i; 
     } 
    if(q!=0) 
     return q; 
    else 
     nextFactor(); 
} 
+0

唯一的問題是,當返回q的範圍有限時,編譯器吐出一個錯誤,在這種情況下,在if語句中。 – user339872