在Java中查找数字的因子并保存到数组中
我正在写一个寻找完美数字的程序。这样做的第一步是找到一个数的所有因子。我需要一些代码来找到一个数字的因子,并将因子保存到一个数组中(而不是打印数字)。这是我到目前为止得到的结果,但它返回一个NullPointerException:在Java中查找数字的因子并保存到数组中,java,arrays,Java,Arrays,我正在写一个寻找完美数字的程序。这样做的第一步是找到一个数的所有因子。我需要一些代码来找到一个数字的因子,并将因子保存到一个数组中(而不是打印数字)。这是我到目前为止得到的结果,但它返回一个NullPointerException: public static int[] getFactors(int number) { int factorNumber = 1; int varArrayStoreID = 0; int[] factors = null; wh
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;
}
publicstaticint[]getFactors(整数){
int factorNumber=1;
int varArrayStoreID=0;
int[]因子=null;
虽然(factorNumber问题是,您必须先初始化数组,然后才能尝试添加任何内容。这在您的情况下并不起作用,因为在执行循环之前,您不知道一个数字将包含多少因素,但我们需要知道初始化数组时有多少因素。我建议从数组
到一个列表
,这样您的收藏可以是动态的。如下所示:
int factorNumber = 1;
List<Integer> factors = new ArrayList<>();
while(factorNumber <= number){
if(number % factorNumber == 0){
factors.add(factorNumber);
}
factorNumber++;
}
或者,如果您不喜欢我的更改,并且根本不想使用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);
int factorNumber=1;
int varArrayStoreID=0;
int[]因子=新的int[number];
while(factorNumber)您需要将int[]factors=null;初始化为某个值而不是null…您的int[]factors=null;
显式地创建了您的问题。您从何处获取此代码?
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);