为什么这个if条件总是排除2?

时间:2017-08-04 16:26:29

标签: java if-statement primes modulo mod

我创建此循环以查找素数,<table class="result" border="1"> <tr> <td>Row</td> <td>Name</td> <td>Description</td> </tr> </table>初始化为0,但调试器总是跳过1 (这是正确的)和2 (这是< strong>不正确)

如何始终跳过int num

2 % 2 == 0

1 个答案:

答案 0 :(得分:0)

您的代码存在的问题是,在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);
            }
        }
    }
}

将素数测试提取到方法中可以轻松地将truefalse返回放置在直观正确的位置。

我用2而不是0开始素数搜索,因为我们都知道0和1根据定义没有素数。