簡體   English   中英

如何從 for 循環值創建單個數組

[英]How to create a single array from for loop values

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter number: ");
        int a = sc.nextInt();
        for ( int i = 1; i < a; i++) {
            int []div = {a/i};
            if (a%i == 0 ) System.out.print(Arrays.toString(div) + " ");
        }
}

輸入:68 輸出:[68] [34] [17] [4] [2]

問題是如何制作單個數組使其看起來像 [68, 34, 17, 4, 2] ?

由於您無法預先計算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);

如果需要,您可以在之后集合轉換為原始數組:

int[] divArr = div.stream().mapToInt(Integer::intValue).toArray();
System.out.println(Arrays.toString(divArr));

3. 單線使用Stream

正如@Eritrean在評論中建議的那樣,您可以使用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包裝器。


PS 為簡潔起見,我省略了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));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM