2015-11-16 35 views
0

我正在編寫程序以查找完美數字。這樣做的第一步是找出一個數字的所有因素。我需要一些代碼來查找數字的因子並將因子保存到數組(不打印數字)。這是我到目前爲止,但它返回一個空指針異常:查找數字的因子並將其保存到Java中的數組中

public static int[] getFactors(int number) { 
    int factorNumber = 1; 
    int varArrayStoreID = 0; 
    int[] factors = null; 

    while(factorNumber <= number){ 
     if(number % factorNumber == 0){ 
      varArrayStoreID = varArrayStoreID + 1; 
      factors[varArrayStoreID] = factorNumber; 
     } 
     factorNumber++; 
    } 

    return factors; 
} 

謝謝。

+2

你需要初始化int [] factors = null; to something and not null ... – StackFlowed

+0

你的int []因子= null;'明確地創建你的問題。無論如何,你從哪裏得到這段代碼? –

回答

1

問題是,您必須先初始化Array,然後才能嘗試向其添加任何內容。這並不適用於你的情況,因爲你不知道數字會有多少因素,直到你進行循環,但是我們需要知道在初始化數組時有多少個因子。我建議將Array更改爲List,這樣您的收藏就可以呈現動態。事情是這樣的:

int factorNumber = 1; 
List<Integer> factors = new ArrayList<>(); 
while(factorNumber <= number){ 
    if(number % factorNumber == 0){ 
     factors.add(factorNumber); 
    } 
    factorNumber++; 
} 

這樣做的最終產品,雖然是一個List<Integer。如果你想返回一個Array,你正在經歷有循環,使一個數組:

int[] output = new int[factors.size()]; 
for (int i=0; i<factors.size(); i++){ 
    output[i] = factors.get(i); 
} 
return output; 

或者,如果你不喜歡我的變化,你不希望在使用List所有你能做這樣的事情來解決你的問題:

int factorNumber = 1; 
int varArrayStoreID = 0; 
int[] factors = new int[number]; 
while(factorNumber <= number){ 
    if(number % factorNumber == 0){ 
     varArrayStoreID = varArrayStoreID + 1; 
     factors[varArrayStoreID] = factorNumber; 
    } 
    factorNumber++; 
} 
return Arrays.copyOfRange(factors, 0, varArrayStoreID); 
相關問題