查找数字因子并使用Java保存到数组中

时间:2015-11-16 20:53:30

标签: java arrays

我正在写一个程序来找到完美的数字。这样做的第一步是找到一个数字的所有因素。我需要一些代码来查找数字因子并将因子保存到数组中(不打印数字)。这是我到目前为止,但它返回一个NullPointerException:

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;
}

感谢。

1 个答案:

答案 0 :(得分:2)

问题是您必须先初始化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);