//判断是否是素数
public class m {
final int MAX=100;
int j=3;
public boolean isprime(int number){

boolean yes=true;
while(j<=Math.sqrt(number)&&yes){
if(number%j==0)
yes=false;
else
        j+=2;
}
     return yes;
}
public static void main(String args[]){
m n=new m();
int k=3;
System.out.print("\t"+2);
while(k<100){
if(n.isprime(k)) 
     System.out.print("\t"+k);
    k+=2;
}

}

}
这里我把int j=0;放在isprime方法外和方法内,结果很不同,这是为什么?我觉得应该结果一样的?高手赐教

解决方案 »

  1.   

    模拟电脑运行。或是debug看看。就知到了
      

  2.   

    一个属于全局变量,一个属于局部变量,当然不一样了。
    虽然你的变量j只是在isprime()中使用了,但是你在main()中使用了for循环多次调用了这个isprime()方法,所以变量应该定义成全局的,而不是局部的。应该就这意思了吧~~
      

  3.   

    我明白是全局变量,可是当把它作为全局变量时运行结果是错误的,不是素数的也可以输出,如果把它放在isprime方法中就对了,就是这里挺纳闷的
      

  4.   

    作为全局变量是你每次调用isprime后j的值并没有被重新赋值为3 所以下一次调用的时候j的值还是这次调用完成后残留的值 所以会错误
      

  5.   

    2楼回帖子太空洞,让我想起了大学时代的老师,理论专家啊,唉,现在实践更重要,在CSDN回答问题要对症下药。
    全局变量和局部变量作用域范围不一样,CSDN的注册用户应该都知道,但是程序执行循环时,每次都调用进行调用相关值,在程序执行过程中值会变化,这是就体现全局变量和局部变量的区别,所以4楼正解。