有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从for循环值创建单个数组

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]


共 (1) 个答案

  1. # 1 楼答案

    由于您不知道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在评论中所建议的,您可以使用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));
    }