我试图从数组中删除零。我可以做一个单独的方法来删除零,但我想以惯用的方式。
public int[] commonFactors(int m, int n) {
int[] numbers = new int[n + 1];
for(int i = 1; i < n + 1; i++) {
if ((m % i == 0) && (n % i == 0)) {
numbers[i] = i;
}
}
return numbers;//or return DelZero(numbers);
}
以下是删除所有零的方法:
public int[] DelZero(int numbers[]) {
int zeroCount=0;
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] == 0) {
zeroCount++;
}
}
int[] newNumber = new int[numbers.length-zeroCount];
int j =0;
for (int i=0; i<numbers.length; i++) {
if (numbers[i] != 0) {
newNumber[j++] = numbers[i];
}
}
return newNumber;
}
所以我的问题的关键在于:有没有办法在不创建新方法的情况下删除零?(在这种情况下没有DelZero。)
答案 0 :(得分:1)
使用Java8,您可以轻松利用Stream
:
int[] arr = new int[]{0,0,7,6,5,0,1,0,4};
int[] arr_without_zeros = IntStream.of(arr).filter(i -> i != 0).toArray();
答案 1 :(得分:1)
这是一个简单的示例,您应该可以从中回答您的问题:
import java.util.Arrays;
public class RemoveZeros {
public static void main(String[] args) {
int[] zeroArray = { 0, 1, 0, 2, 0, 3, 0, 4, 0, 5 };
System.out.println("Original array: " + Arrays.toString(zeroArray));
int nonZeros = 0;
for (int i = 0; i < zeroArray.length; i++) {
if (zeroArray[i] != 0) {
nonZeros++;
}
}
int[] tempArray = new int[nonZeros];
int tempIndex = 0;
for (int j = 0; j < zeroArray.length; j++) {
if (zeroArray[j] != 0) {
tempArray[tempIndex] = zeroArray[j];
tempIndex++;
}
}
zeroArray = tempArray;
System.out.println("Modified array: " + Arrays.toString(zeroArray));
}
}
输出:
Original array: [0, 1, 0, 2, 0, 3, 0, 4, 0, 5]
Modified array: [1, 2, 3, 4, 5]
答案 2 :(得分:0)
我考虑使用java.util.List而不是原始数组。突然间,一切都变得容易了......
public List<Integer> commonFactors(int m, int n) {
List<Integer> numbers = new ArrayList<Integer>();
for (int i = 1; i < n + 1; i++) {
if ((m % i == 0) && (n % i == 0) && i != 0) {
numbers.add(i);
}
}
return numbers;
}