Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';我的简单Java程序出了什么问题?_Java_Primes - Fatal编程技术网

什么';我的简单Java程序出了什么问题?

什么';我的简单Java程序出了什么问题?,java,primes,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;

它应该只打印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);
        }

    }
}
公共类类和对象{
公共静态void main(字符串[]args){
素数n=新素数();
对于(int i=3;i<100;i++){
n、 数字=i;
n、 因子();
}
}
}
类素数{
长数;
长期事实;
布尔状态=真;
空隙系数(){
对于(事实=2;事实<数字;事实++){
如果(事实!=数字){
如果(数字%fact==0){
状态=假;
打破
}
}
}
if(state==true){
系统输出打印项次(编号);
}
}
}

添加如下语句:

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

    state = true; //reset the state variable

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

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

void factors(){
状态=真;
对于(事实=2;事实<数字;事实++){
如果(事实!=数字){
如果(数字%fact==0){
状态=假;
打破
}
}
}
if(state==true){
系统输出打印项次(编号);
}
}

好吧,在factor()方法中,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);
    }

}
void factors(){
**布尔状态=真**
对于(事实=2;事实<数字;事实++){
如果(事实!=数字){
如果(数字%fact==0){
状态=假;
打破
}
}
}
if(state==true){
系统输出打印项次(编号);
}
}

这一定是Java有史以来最糟糕的素数实现之一。我才刚刚开始。我还不知道我在做什么。
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);
    }

}