我正在尝试向方法发送数组并检查数组整数值是否为素数,然后将所有素数存储在新数组中并将其发回。
import java.util.Arrays;
public class FunPrime {
public static int[] calculate(int[] arr) {
int arr2[] = {};
int count = 0;
for (int i = 0, m = 0; i < arr.length; i++) {
for (int j = 1; j <= arr[i]; j++) {
if (arr[i] % j == 0) {
count++;
}
if (count > 2)
break;
}
if (count <= 2) {
arr2[m] = arr[i];
}
}
return arr2;
}
public static void main(String args[]) {
int no[] = { 1, 4, 5, 6, 7, 8, 11, 22, 43 };
System.out.println(Arrays.toString(calculate(no)));
}
}
答案 0 :(得分:2)
在开始使用引用之前,您确实希望使用new
来分配该内存。我也认为你可以取消x = x和x = 1;然后你可以休息一下你的循环。那应该更快。像
for (int y = 2; y < x; y++) if (x % y == 0) { result = true; break; }
答案 1 :(得分:2)
在Java中如果我们写
int array = new int [10] ;
然后是动态初始化而不是静态。因此,您需要通过
静态分配内存int array = { 1, 4, 5, 6, 7, 8, 11, 22, 43 };
将来如果你想将数组初始化为零,那么你可以使用
int arr[] = new int[10];
for(int i=0;i<arr.length;i++)
arr[i] = 0;
答案 2 :(得分:2)
至少有三件事是错的......
<强>首先... 强>
int arr2[] = {};
创建一个没有可用于存储任何内容的位置的空数组,这意味着当您尝试访问其中的任何元素时,您将获得ArrayIndexOutOfBoundsException
您应该将数组初始化为所需的长度,例如......
int arr2[] = new int[arr.length];
<强>双... 强>
count
的值在使用后永远不会重新初始化,这意味着它在每个循环中不断增加,这意味着它只能报告第一次成功匹配,相反,你应该在每个循环上将count
初始化为0
,例如......
for (int i = 0, m = 0; i < arr.length; i++) {
count = 0;
for (int j = 1; j <= arr[i]; j++) {
<强>第三... 强>
m
永远不会增加,这意味着您始终将成功匹配存储在arr2
中的第一个元素位置,不要忘记增加值,例如......
arr2[m] = arr[i];
m++;
<强>加成强>
问题是,这会为不匹配的元素返回0
,例如......
[1, 5, 7, 11, 43, 0, 0, 0, 0]
这可能不是理想的
你可以修剪&#34;结果使用System.arraycopy
,但您需要先进行一次小修改。 m
值表示匹配的数量,这很有用,但由于它在for-loop
中声明,我们无法在for-loop
之外访问它,因此相反,您需要在for-loop
之外声明它,例如......
int m = 0;
for (int i = 0; i < arr.length; i++) {
这允许我们声明第三个数组,它将保存我们想要的最终结果,例如......
int[] arr3 = new int[m];
System.arraycopy(arr2, 0, arr3, 0, m);
return arr3;
现在将输出...
[1, 5, 7, 11, 43]
而不是......
[1, 5, 7, 11, 43, 0, 0, 0, 0]
答案 3 :(得分:1)
使用零元素初始化第二个数组
int arr2[] = {};
Arrays不会增长,因此arr2[0] = someValue
会给你一个ArrayIndexOutOfBounds
,因为没有第一个元素。
答案 4 :(得分:0)
创建新数组时,应指定其大小。
int arr2[] = {};
这会创建一个大小为0的数组。您可能会得到一个ArrayIndexOutOfBoundsException
答案 5 :(得分:0)
这是你的解决方案..这将打印
[1,5,7,11,43]
import java.util.ArrayList;
public class FunPrime {
public static ArrayList<Integer> calculate(int[] arr) {
ArrayList<Integer> l = new ArrayList<Integer>();
for (int i = 0; i < arr.length; i++) {
if(isPrime(arr[i]))
{
l.add(arr[i]);
}
}
return l;
}
static boolean isPrime(int n) {
for(int i=2;i<n;i++) {
if(n%i==0)
return false;
}
return true;
}
public static void main(String args[]) {
int no[] = { 1, 4, 5, 6, 7, 8, 11, 22, 43 };
System.out.println(calculate(no));
}
}