我正在写一个程序来找到完美的数字。这样做的第一步是找到一个数字的所有因素。我需要一些代码来查找数字因子并将因子保存到数组中(不打印数字)。这是我到目前为止,但它返回一个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;
}
感谢。
答案 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);