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被当作素数。
答案 0 :(得分:2)
您的代码中存在多个问题。
<template>
</template>
<script>
window.location.replace("https://myotherdomain.com");
</script>
是元凶。根据此条件,j <= arr[i]/2
和j <= 1
。因此,循环不会执行。 为什么将9用作素数。
首次出现j == 2
和j == 2
时。与arr[i] == 9
一样,数字以质数打印。
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
答案 1 :(得分:1)
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);
}
答案 2 :(得分:-1)
您需要在第二个for循环中删除此条件 j <= arr [i] / 2。
您正在寻找的是j <= arr [i]