public static boolean isPrime(int n){
  for(int j=2;j<=n;j++){
    if (n%j==0) return false;
    else return true;
  }
}这个方法在编译时为什么会出错....希望前辈们解答下为什么......public static boolean isPrime(int n){
  for(int j=2;j<=n;j++){
    if (n%j==0) return false;
    }
    return true;
}这样写就能通过编译

解决方案 »

  1.   

    因为你的 for循环不一定能执行,如果n得\值小于2 那么你的方法就没有返回值了
      

  2.   

    想想看,如果你的for都没有执行的话isPrime(int n)能返回吗?
      

  3.   

    2楼,3楼说得都对,其实就是楼主对int范围理解不够导致的,应该对n小于2的情况进行处理,如下代码也可以:public static boolean isPrime(int n){
    if(n<2){
    return false;
    }else{
    for(int j=2;j <=n;j++){
    if (n%j==0) return false;
    else return true;
    }
    return true;
    }

      

  4.   

    谢谢各位的解答;不过还有点不明白...
    public static boolean isPrime(int n){
            if(n<2){  
                return false;
            }else{
                for(int j=2;j <=n;j++){
                    if (n%j==0) return false;
                    else return true;    
                }
               // return true;  //要是把这一句不要了...还是编译不通过....n不管取什么.都有会有反回值了吧
                                    //为何这一句不能省去?
            }
        } 
      

  5.   

    程序没办法自动想到我们已经考虑清楚所有情况了,所以还是认为for可能不会执行。
      

  6.   


    这个还是像2、3楼所说的一样,因为可能不执行for(){}循环的循环体,比如:我取n = 3,第1次循环时j=2,
    2 <= 3成立,执行后面的循环体,完成后返回一个布尔值并且j++,j = 3;进入第2次循环,3 <= 3成立,执行后面的循环体,完
    成后返回一个布尔值并且j++,j = 4;而4 <= 3不成立,所以不会再执行循环体,而这时没有相应的布尔值返回,
    这和方法声明中需要返回一个boolean值是相违背的,所以会出错~~~~!!!