查看int数组并忽略数字的倍数的方法

时间:2018-05-12 15:59:21

标签: java arrays methods int

我正在制作一种忽略倍数的方法。输入是..
int[] Eliminate = new int[]{1, 54, 20, 17, 60};

这是代码..

public static int[] EliminateMultiples(int[] List, int Num) {
int[] New = new int[List.length];
    int NewListIndex = 0;
    for (int i=0; i<List.length; i++) { 
        if ((List[i] % Num !=0 )) {
            New[NewListIndex] = List[i];
        }
        NewListIndex++;
        System.out.println(New[i]);
    }
    return New;
}

我得到的问题是输出中有零。我认为这是因为我将新列表的长度设置为旧列表,即使新列表可能没有那么多数字。

2 个答案:

答案 0 :(得分:0)

使用Java 8 Streams的简单解决方案:

public static int[] eliminateMultiples(int[] list, int num) {
    return Arrays.stream(list).filter(i -> i % num != 0).toArray();
}

如果您还要打印每个元素,可以peek进入流并打印它们:

public static int[] eliminateMultiples(int[] list, int num) {
    return Arrays.stream(list).filter(i -> i % num != 0).peek(System.out::println).toArray();
}

如果你真的需要使用数组,至少需要2个循环:

  1. 计算元素数量:

    int count = 0;
    for (int element : list) {
        if (element % num != 0)
            count++;
    }
    
  2. 使用元素数量(从1开始)创建数组并填充它。

    int[] result = new int[count];
    int i = 0;
    for (int element : list) {
        if (element % num != 0) {
            result[i++] = element;
        }
    }
    return result;
    
  3. 正如你所看到的,写下来还有很多。

答案 1 :(得分:0)

这是一个解决方案,它将使您成为一个正确大小的数组。它不同于因为NewListIndex被推入if,并且在结束数组中被“trimed”为正确的长度。

public static int[] EliminateMultiples(int[] List, int Num) {
    int[] New = new int[List.length];
    int NewListIndex = 0;
    for (int i=0; i<List.length; i++) { 
        if ((List[i] % Num !=0 )) {
            New[NewListIndex] = List[i];
             NewListIndex++;
        }

    }
    int [] ret=Arrays.copyOfRange(New, 0, NewListIndex);

    return ret;
}