中间被我注释掉的for循环是我的想法
可是我查了查,人家说只需要算到i的平方根就可以了。于是没注释掉的部分就出现了
可是这样计算出来的不正确,求解
    //2。输出a 到 b之间的素数
    public static void primeNumber(int primeA,int primeB){
     //如果前面那个数比后面那个数大,那么调换位置,以后可以改成让用户输入的
     if(primeA>primeB){
     int temp=primeA;
     primeA=primeB;
     primeB=temp;
     }
     //在循环外定义
     int i,j;
     for(i=primeA;i<primeB+1;i++){
     //据说只需要让j<Math.sqrt(i)就可以了,不知道为什么好像素数就这样
     /*
     for(j=2;j<i;j++){
     if(i%j==0)
     break;
     }
     */     for(j=2;j<Math.sqrt(i);j++){
     if(i%j==0)
     break;
     }
     //判断是否循环到最后,也可以在大循环外加个判断boolean flag=false;
     if(i==j)
     System.out.println(i+" 是一个素数");
     }
    }

解决方案 »

  1.   

    break 只挑出当前循环
    随便改了下        label1:
            for(i=primeA;i<primeB+1;i++){
    if(i==1){
    continue label1;
    }else if(i==2){
    System.out.println(i+" 是一个素数");
    }
                for(j=2;j<Math.sqrt(i)+1;j++){
                    if(i%j==0)
                        continue label1;
                }
                System.out.println(i+" 是一个素数");
            }
      

  2.   

    for循环改成这样是可以了,可是有个问题,只能从Math.sqrt>2的时候才正确,如果<2的话例如2到5都是不会进入里面那个for循环的求解
    int i,j;
         for(i=primeA;i<primeB+1;i++){
         //加个开关
         boolean flag=true;
         for(j=2;j<(int)Math.sqrt(i);j++){
         if(i%j==0){
         flag=false;//关上开关
         break;
         }
         }
         //System.out.println(flag);
         if(flag==true)
         System.out.println(i+" 是一个素数");
         }