Prime数字的循环错误

时间:2015-06-20 15:47:43

标签: java while-loop numbers

import java.util.Scanner;


public class Main {

public static void main (String[] args)
{       
    int value;      
    int check = 2;
    boolean flag = true;

    Scanner input = new Scanner(System.in); 
    System.out.println("Number of times:");
    value = input.nextInt();

    for(int i = 2; i <= value;i++ )
    {
        while(check <= i/2)
        {
            if(i%check == 0)
            {
                flag = false;
                break;
            }
            check++;
        }
        if(flag)
        {
            System.out.print(i + ", ");

        }           
    }

}

输出始终打印:3和5的倍数

节目打印2,3,5,7,9,11,13,15

我想知道它为什么会发生,因为当我干掉它时,它不会捡到3和5。

2 个答案:

答案 0 :(得分:2)

您需要在for循环中为check的每个值初始化flagi。否则,一旦找到合成数字,它将继续将数字视为复合数字。

答案 1 :(得分:1)

在代码中进行以下更改

 for(int i = 2; i <= value;i++ )
{ 
    check = 2; flag = true;
    while(check <= i/2)
    {
        if(i%check == 0)

每次fr循环都会运行check的值,并且标志会保留在早期迭代中,因为您将获得此行为