因此,我想编写一个方法来创建一个包含一定数量的所有除数的数组。因此,我创建了一个空数组(int []除数),该数组随后将通过for循环获取其数字,但它表示该数组尚未初始化。我该怎么办?
该方法的输出稍后将用于查找两个数字的最大公约数,因此数组中数字从最小到最大的顺序很重要。我知道有一个更简单的解决方案可以执行此操作,但是我想使用数组来执行此操作,因为我现在想专注于学习这些。
public static int[] allDivisors(int number) {
int[] divisors;
int counter= 0;
for (int i = 0; i <= number; i++) {
if(number % i == 0) {
divisors[counter]= i;
counter++;
}
}
return divisors;
}
我找不到在线解决我问题的合适方法,希望我能在这里为我提供帮助。我需要的是一种将特定元素添加到我无法预先定义的数组中的方法(在这种情况下,是一定数量的所有除数。)在此先感谢您的所有回答!
答案 0 :(得分:2)
在这种情况下,数组不是正确的数据结构,因为在使用数组之前,您需要使用大小(整数)对其进行初始化。
但是您不知道将在数组中存储多少个项目,对吗?
因此,您必须像这样使用ArrayList
:
public static ArrayList<Integer> allDivisors(int number) {
ArrayList<Integer> divisors = new ArrayList<>();
for (int i = 1; i <= number; i++) {
if(number % i == 0) {
divisors.add(i);
}
}
return divisors;
}
我也在循环中进行了更改:
int i = 0
到
int i = 1
为避免在以后的时间中被0
除以
number % i
您也不需要counter
。
您可以在代码中调用此方法:
int number = 30;
ArrayList<Integer> list = allDivisors(number);
System.out.println("The divisors of " + number + " are:");
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + " ");
}
它将打印:
The divisors of 30 are:
1 2 3 5 6 10 15 30
答案 1 :(得分:0)
如果您严格希望使用数组来执行此操作,请尝试对程序进行以下更改。
public static int[] allDivisors(int number) {
int[] divisors = new int[number]; // Have to initialize the array
int counter= 0;
for (int i = 1; i <= number; i++) { // i should start from 1; not from zero. Otherwise you get ArithmeticException (divide by zero)
if(number % i == 0) {
divisors[counter]= i;
counter++;
}
}
int[] trimmedDivisors = new int[counter];
System.arraycopy(divisors, 0, trimmedDivisors, 0, counter);
return trimmedDivisors;
}
答案 2 :(得分:0)
在Java中,使用数组之前,必须对其进行初始化。
public static int[] allDivisors(int number) {
int[] divisors = new int[number];
int counter= 0;
for (int i = 0; i <= number; i++) {
if(number % i == 0) {
divisors[counter]= i;
counter++;
}
}
Arrays.sort(divisors);
return divisors;
}