2016-06-30 33 views
-1

它只是打印100以下的素数,但它只能得到数字“3”作为输出。我只是刚刚开始学习Java,所以这一切看起来都适合我。我的简单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); 
     } 

    } 
} 
+0

这必须是Java中最糟糕的素数实现之一。 – Eiko

+0

我刚刚开始。我不知道我在做什么。 –

回答

0

你必须在每次通话开始的布尔状态重置为true,否则它总是除第一次调用错误(当i = 3)

​​
0

添加如下语句:

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

    state = true; //reset the state variable 

在这里,我们重置状态变量设置为true为下一次迭代。

0

好了,你不要有状态=真作为factor()方法的默认值。所以当它第一次运行state = false时(发生在Number = 4时),它总是假的。只需在你的代码中添加粗体行,你就可以走了。

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); 
    } 

} 
相关问题