我是Java的新手,我正试图想出一种方法来复制数组中的所有素数并将它们复制到另一个数组中。
为此,我实现了一个单独的isPrime()
方法来检查元素是否是素数,另一个方法是计算该数组countPrimes()
中素数的数量,这样我就可以确定新数组的大小。
这是我陷入困境的地方:
public static int[] primesIn(int[] arr) {
int primeHolder = countPrimes(arr);
int[] copyArr = new int[primeHolder];
for (int i = 0; i < arr.length; i++) {
if (isPrime(arr[i]) == true) {
copyArr[>Needs to start from 0<] = arr[i];
}
}
return copyArr;
}
int[] arrayMan = {3,5,10,15,13};
在copyArr
,位置应该是0
,其次是+1
每次它找到一个素数。如果我给它i
位置,如copyArr[i] = arr[i]
,然后说素数位于5
位置,它会尝试将素数保存到位置5
of copyArr
,如果原始数组中只有三个素数,则不存在这将给copyArr
只有三个长度。
有些东西告诉我一个不同的for循环,或者甚至另外一个会有所帮助,但我看不出我应该如何实现它。非常感谢帮助!
有第二个索引变量int primeCount
,并在找到素数时递增它。不需要第二个循环。
在丰富记忆的现代,通常不会像这样做。如果你没有一些额外的硬性要求,你可以在那里使用可调整大小的ArrayList<Integer>
和add()
。 (如果需要,最后将其转换回int [])。在这种情况下,这也更好,因为通常你的countPrimes
调用运行速度比ArrayList重新分配慢得多。
仔细阅读你的话:
在
copyArr
,位置应该是0
,其次是+1
每次它找到一个素数。
这意味着新数组中的索引不依赖于它在旧数组中的位置。 创建一个计数器。每次将素数放入新数组时,将其递增1.因此,您始终可以知道将新数字放在何处。