Java中如何将数组非0元素传递到另一个方法或数组?
嘿,我来帮你解决这个提取数组非0元素的问题!结合你给出的代码结构,这里有两种实用的实现方式:
解决方案:从数组中过滤掉0元素
方法1:传统循环实现(兼容所有Java版本)
这种方式先统计原数组里非0元素的数量,再创建对应长度的新数组,最后把符合条件的元素复制进去,性能稳定,适合所有Java版本。
你可以直接在你的SieveOfEratosthenes类里新增一个过滤方法,或者修改现有的sieve方法:
import java.util.Arrays; public class SieveOfEratosthenes { public static void main(String[] args) { int[] myArray = new int[12]; fillArrayWithNumbers(myArray); // 假设这个方法已经把数组填充为你给出的[0,1,2,3,0,5,0,7,0,0,0,11] System.out.println(Arrays.toString(filterNonZeroElements(myArray))); } // 专门用于过滤非0元素的方法 public static int[] filterNonZeroElements(int[] originalArray) { // 第一步:统计非0元素的总数 int nonZeroCount = 0; for (int num : originalArray) { if (num != 0) { nonZeroCount++; } } // 第二步:创建新数组并填充非0元素 int[] resultArray = new int[nonZeroCount]; int currentIndex = 0; for (int num : originalArray) { if (num != 0) { resultArray[currentIndex++] = num; } } return resultArray; } // 你的数组填充方法(这里补全示例逻辑) private static void fillArrayWithNumbers(int[] array) { array[0] = 0; array[1] = 1; array[2] = 2; array[3] = 3; array[4] = 0; array[5] = 5; array[6] = 0; array[7] = 7; array[8] = 0; array[9] = 0; array[10] = 0; array[11] = 11; } }
方法2:Java 8+ Stream API(代码更简洁)
如果你的项目使用Java 8或更高版本,用Stream API可以用更少的代码实现相同功能,可读性也很强:
import java.util.Arrays; import java.util.stream.IntStream; public class SieveOfEratosthenes { public static void main(String[] args) { int[] myArray = new int[12]; fillArrayWithNumbers(myArray); // 一行代码完成过滤 int[] nonZeroArray = IntStream.of(myArray) .filter(num -> num != 0) .toArray(); System.out.println(Arrays.toString(nonZeroArray)); } // 你的数组填充方法 private static void fillArrayWithNumbers(int[] array) { array[0] = 0; array[1] = 1; array[2] = 2; array[3] = 3; array[4] = 0; array[5] = 5; array[6] = 0; array[7] = 7; array[8] = 0; array[9] = 0; array[10] = 0; array[11] = 11; } }
运行结果
两种方法执行后,都会输出你想要的结果:
[1, 2, 3, 5, 7, 11]
内容的提问来源于stack exchange,提问作者rafal.wawrzyniak
相关产品推荐
相关产品推荐

