由于您无法预先知道div 有多少个元素(它需要对a 进行因式分解),因此您有多种选择:
1。单独计算div 的大小:
int a = 68;
int n = 0; // length of the result
for (int i = 1; i < a; i++) {
if (a % i == 0) {
n++;
}
}
int[] div = new int[n];
n = 0;
for (int i = 1; i < a; i++) {
if (a % i == 0) {
div[n++] = a / i;
}
}
System.out.println(Arrays.toString(div));
2。使用可变增长集合而不是数组:
int a = 68;
List<Integer> div = new ArrayList<>();
for (int i = 1; i < a; i++) {
if (a % i == 0) {
div.add(a / i);
}
}
System.out.println(div);
如果你需要,你can convert 集合到原始数组之后:
int[] divArr = div.stream().mapToInt(Integer::intValue).toArray();
System.out.println(Arrays.toString(divArr));
3。单行使用Stream:
正如 @Eritrean 在 cmets 中建议的那样,您可以使用 IntStream 来构建您的数组:
int a = 68;
int[] div = IntStream
.range(1, a)
.filter(i -> a % i == 0)
.map(i -> a / i)
.toArray();
System.out.println(Arrays.toString(div));
它将比第二个变体更有效,因为它避免了创建 Integer 包装器。
附:为简洁起见,我省略了 main 方法和 Scanner 初始化。如果需要,您可以将其放回原处,例如:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter number: ");
int a = sc.nextInt();
int n = 0; // length of the result
for (int i = 1; i < a; i++) {
if (a % i == 0) {
n++;
}
}
int[] div = new int[n];
n = 0;
for (int i = 1; i < a; i++) {
if (a % i == 0) {
div[n++] = a / i;
}
}
System.out.println(Arrays.toString(div));
}