我正在制作一种忽略倍数的方法。输入是..
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;
}
我得到的问题是输出中有零。我认为这是因为我将新列表的长度设置为旧列表,即使新列表可能没有那么多数字。
答案 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个循环:
计算元素数量:
int count = 0;
for (int element : list) {
if (element % num != 0)
count++;
}
使用元素数量(从1开始)创建数组并填充它。
int[] result = new int[count];
int i = 0;
for (int element : list) {
if (element % num != 0) {
result[i++] = element;
}
}
return result;
正如你所看到的,写下来还有很多。
答案 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;
}