是否可以通过for循环创建数组元素?

时间:2018-12-26 15:06:41

标签: java arrays

因此,我想编写一个方法来创建一个包含一定数量的所有除数的数组。因此,我创建了一个空数组(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;
}

我找不到在线解决我问题的合适方法,希望我能在这里为我提供帮助。我需要的是一种将特定元素添加到我无法预先定义的数组中的方法(在这种情况下,是一定数量的所有除数。)在此先感谢您的所有回答!

3 个答案:

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