我的简单Java程序有什么问题?

时间:2016-06-30 10:35:13

标签: java primes

它应该打印低于100的素数,但它只得到数字' 3'作为输出。我只是刚刚开始学习Java所以它看起来都适合我。

public class ClassesAndObjects {
    public static void main(String[] args) {        
        Prime n = new Prime();
        for (int i = 3; i < 100; i++){
            n.Number = i;
            n.factors();
        }
    }

}

class Prime{
    long Number;
    long fact;
    boolean state = true;

    void factors(){
        for (fact = 2; fact < Number; fact++){
            if (fact != Number){
                if (Number % fact == 0){
                    state = false;
                    break;
                }
            }
        }
        if (state == true){
            System.out.println(Number);
        }

    }
}

3 个答案:

答案 0 :(得分:0)

添加如下声明:

    if (state == true){
        System.out.println(Number);
    }

    state = true; //reset the state variable

这里我们将状态变量重置为true以进行下一次迭代。

答案 1 :(得分:0)

你必须在每次调用开始时将布尔状态重置为true,否则除了第一次调用(当i = 3时)它总是为假

void factors(){

    state = true;
    for (fact = 2; fact < Number; fact++){
        if (fact != Number){
            if (Number % fact == 0){
                state = false;
                break;
            }
        }
    }
    if (state == true){
        System.out.println(Number);
    }

}

答案 2 :(得分:0)

好吧,你没有在因子()方法中将state = true作为默认值。因此,当它第一次运行state = false时(在Number = 4时发生),它总是为false。只需在代码中添加粗体线,就可以了。

void factors(){
    **boolean state = true;**
    for (fact = 2; fact < Number; fact++){
        if (fact != Number){
            if (Number % fact == 0){
                state = false;
                break;
            }
        }
    }
    if (state == true){
        System.out.println(Number);
    }

}
相关问题