A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这是一个求1-100之间素数的代码,在判断函数是否是素数的函数里,我有点想不通为什么,在循环里面写上return,编译时还是提示缺少返还值
这是源代码

  1. <p> //1~1000之间的素数
  2. public class Prog2{
  3. public static void main(String[] args){
  4.   
  5.   int count = 0;
  6.   //统计素数个数
  7.   for(int i=1;i<1000;i++){
  8.    if(panDuan(i)){
  9.     count++;
  10.     System.out.print(i+" ");
  11.     if(count%10==0){
  12.      System.out.println();
  13.     }
  14.    }
  15.   }
  16.   System.out.println();
  17.   System.out.println("在"+1+"和"+1000+"之间共有"+count+"个素数");
  18. }
  19. //判断素数
  20. private static boolean panDuan(int n){
  21.   boolean flag = true;
  22.   if(n==1)
  23.    flag = false;
  24.    //return false;
  25.   else{
  26.    for(int i=2;i<Math.sqrt(n);i++){
  27.    if((n%i)==0 ){//|| n==1
  28.     flag = false;
  29.     //return false;
  30.     break;
  31.    }
  32.     else
  33.       flag = true;
  34.     //return true;
  35.     }
  36.   }
  37.   return flag;
  38. }
  39. }
  40. </p><p> </p>
复制代码

11 个回复

倒序浏览
  1. private static boolean panDuan(int n){
  2.                 //boolean flag = true;
  3.                 if(n==1)
  4.                         //flag = false;
  5.                         return false;
  6.                 else{
  7.                         for(int i=2;i<Math.sqrt(n);i++){
  8.                         if((n%i)==0 ){//|| n==1
  9.                                 //flag = false;
  10.                                
  11.                                 return false;
  12.                                 break;
  13.                                
  14.                         }
  15.                          else
  16.                            //flag = true;
  17.                                 return true;
  18.                   }
  19.                 }
  20.                 //return flag;
  21.         }
复制代码
这个是我改过之后的有点小问题,为什么else那里还缺少返还值啊
回复 使用道具 举报
return返还值在循环中,如果直接return值了,在循环外面还需要return吗?
回复 使用道具 举报
  1. class Text1
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int y=panDuan(2);
  6.                 System.out.println("y="+y);
  7.         }
  8.        
  9.         public static int panDuan(int x){
  10.                
  11.                 for(int i=0;i<9;i++){
  12.                         if(i<5){
  13.                                 return x+1;
  14.                         }
  15.                         else
  16.                                 return 1;
  17.                 }
  18.         }
  19. }
复制代码
这个也是缺少返还值,why?
回复 使用道具 举报
第18行提示缺少返回语句
回复 使用道具 举报
め白衬衫 发表于 2014-10-7 22:28
第18行提示缺少返回语句

那个for循环错了。
你循环里面写个if怎么样,就返回什么什么,然后else返回什么,循环还起什么作用,非此即彼啊,循环体只执行了一次就返回了。
回复 使用道具 举报
返回值有问题,
回复 使用道具 举报
private static boolean panDuan(int n){

21.  boolean flag = true;

22.  if(n==1)

23.   flag = false;

24.   //return false;

25.  else{

26.   for(int i=2;i<Math.sqrt(n);i++){

27.   if((n%i)==0 ){//|| n==1

28.    flag = false;

29.    //return false;

30.    break;

31.   }

32.    else

33.      flag = true;

34.    //return true;

35.    }

36.  }

37.  return flag;

38. }
这段代码中,由于有条件分支判断, //return false中的//需要去掉,而最后一个return flag是多余的。所以才会报错
回复 使用道具 举报
panDuan方法中编译器并不确定是否执行for循环(比如,for(int i =0;i<0;),所以他会要求你必须有return。有什么不懂继续问。求技术分。求黑马币
回复 使用道具 举报
感觉是花括号或者return出了问题,写代码记得缩进,改写的括号不要省略了。
public class Prog2{
        public static void main(String[] args){
   int count = 0;
  //统计素数个数
  for(int i=1;i<1000;i++){
        if(panDuan(i)){
    count++;
    System.out.print(i+" ");
        }
    if(count%10==0){
     System.out.println();
    }
  System.out.println();
  System.out.println("在"+1+"和"+1000+"之间共有"+count+"个素数");
}
//判断素数
        private static boolean panDuan(int n){
                boolean flag = true;
                if(n==1){
                flag = false;
                //return false;
                }else{
                        for(int i=2;i<Math.sqrt(n);i++){
                                if((n%i)==0 ){//|| n==1
                                flag = false;
                                //return false;
                                break;
                        }
                }else{
                flag = true;
                //return true;
                }
                return flag;
        }
}
看看这段可以运行了不
回复 使用道具 举报
{:3_54:} return直接退出当前方法了,在循环外部补一个return 应该没什么影响吧
回复 使用道具 举报
晕。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马