[英]Separate prime numbers from array
public class HelloWorld {
public static void main(String []args) {
int [] arr = {2, 5, 9, 6, 7, 13, 24, 42, 8};
int [] arr1 = new int[4];
int [] arr2 = new int[arr.length - arr1.length];
for(int i = 0; i < arr.length; i++) {
for(int j = 2; j <= arr[i]/2; j++) {
if(arr[i] % j == 0) {
System.out.println("Number is not prime " + arr[i]);
break;
}
else {
System.out.println("Number is prime " + arr[i]);
break;
}
}
}
}
}
该程序应检查一组数字并打印给定的数字是否为素数。 有一些错误,因为前两个没有标记为素数。 然后我不知道为什么9被视为素数。
您的代码中存在多个问题。
j <= arr[i]/2
是罪魁祸首。 根据这种情况, j <= 1
且j == 2
。 因此,循环不会被执行。 为什么9被视为素数。 这是第一次当j == 2
和arr[i] == 9
。 As, 9%2 != 0
,数字打印为素数。
for(int j = 2; j <= arr[i]/2; j++){ if(arr[i] % j == 0){ System.out.println("Number is not prime " + arr[i]); break; } else { System.out.println("Number is prime " + arr[i]); break; } }
建议:您可以使用数字的平方根来检查,而不是检查arr[i]/2
。
如果需要,您可以参考以下程序:
public class PrimeNumber {
public static void main(String []args){
int [] arr = {2,3,4,5,9,6,7,13,24,42,8,400,101};
int [] arr1 = new int[4];
int [] arr2 = new int[arr.length - arr1.length];
boolean flag = true;
for(int i = 0; i < arr.length; i++){
if(arr[i] == 2 || arr[i] == 3 )
{
System.out.println("Number is prime " + arr[i]);
continue;
}
flag = true;
for(int j = 2; j <= Math.sqrt( arr[i] ); j++){
if(arr[i] % j == 0){
System.out.println("Number is not prime " + arr[i]);
flag = false;
break;
}
}
if ( flag )
{
System.out.println("Number is prime " + arr[i]);
}
}
}
}
for (int j = 2; j <= arr[i] / 2; j++) {
if (arr[i] % j == 0) {
System.out.println("Number is not prime " + arr[i]);
break;
} else {
System.out.println("Number is prime " + arr[i]);
break;
}
}
在这里你只迭代一次并检查给定的数字是否可以被2分割(即这等于arr[i] % 2 == 0
)。 要检查给定的数字是否为素数,您必须检查从2到sqrt(val)的所有数字。
我建议您将此检查选择为单独的方法。
import java.util.function.IntPredicate;
final IntPredicate isPrime = val -> {
if (val < 2)
return false;
for (int i = 2, sqrt = (int)Math.sqrt(val); i <= sqrt; i++)
if (val % i == 0)
return false;
return true;
};
而且您的代码看起来更简单:
int[] arr = { 2, 5, 9, 6, 7, 13, 2, 4, 42, 8 };
for (int val : arr) {
if (isPrime.test(val))
System.out.println("Number is prime " + val);
else
System.out.println("Number is not prime " + val);
}
你需要在你的第二个for循环j <= arr [i] / 2中删除这个条件。
你要找的是j <= arr [i]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.