为什么这个if条件总是排除2?
问题描述:
我创造了这个循环找素数,该int num
初始化为0,但调试总是跳过1 (这是正确的)和2 (这是不正确)。为什么这个if条件总是排除2?
它怎么会总是跳过2 % 2 == 0
?
for (int num = 0; num <= 100; num++) {
for (int j = 2; j < num; j++) {
if (num % j == 0) {
System.out.println(num + " is not a prime number.");
break;
}
if (num - j == 1) {
System.out.println("PRIME NUMBER FOUND! It's: " + num + ".");
myPrimeNumbers.add(num);
}
}
}
答
您的代码的问题在于,在num = 2的情况下,您无法进入添加素数的部分。您选择使用内循环的最后一次迭代作为将素数添加到列表的位置,但num = 2时内循环有0次迭代。
我会修改你的程序如下:
package test;
import java.util.ArrayList;
import java.util.List;
public class Test {
private static boolean isPrime(int num) {
for (int j = 2; j < num; j++) {
if (num % j == 0) {
return false;
}
}
return true;
}
public static void main (String [] args) {
List<Integer> myPrimeNumbers = new ArrayList<>();
for (int num = 2; num <= 100; num++) {
if (isPrime(num)) {
System.out.println("PRIME NUMBER FOUND! It's: " + num + ".");
myPrimeNumbers.add(num);
}
}
}
}
提取黄金考不上的方法可以很容易地放置true
和false
回报的,他们是凭直觉正确的位置。
我开始用2而不是0进行素数搜索,因为我们都知道0和1根据定义没有素数。
'2(j)
谢谢,只是需要添加' kebabjoe
'