黑马程序员技术交流社区

标题: 程序出错 帮忙找找 [打印本页]

作者: 李龙涛    时间: 2011-7-25 17:15
标题: 程序出错 帮忙找找
问题描述:题目:判断101-200之间有多少个素数,并输出所有素数
public class prime {
public static void main(String[] args) {
  double i,count=0;
  for(i=101;i<200;i++)
   if(isPrime(i)){
    System.out.print(i+" ");
      count++;
     if(count%10==0)
      System.out.println();
     }
  System.out.println("\n"+count);
}
private static boolean isPrime(double n) {
int i;
  for( i=2;i<=Math.sqrt(n);i++)
   if(n%i==0)
    return false;
  if(i>=n/2)
   return true;
  else
   return false;
  
  }
}

我到底哪里写错了
作者: 匿名    时间: 2011-7-25 17:51
标题: 龙涛 加油 黑马上认识的朋友
public class Prime {
public static void main(String[] args) {
  int i,count=0;
  for(i=101;i<=200;i++)
   {
          if(isPrime(i))
          {
                  System.out.print(i+",");
                  count++;
      }
      
     if(count%10==0)
      System.out.println("");
     }
  System.out.println("\n"+count);
}
private static boolean isPrime(int n) {
         int k = (int)Math.sqrt(n);
          int i;
          for(i=2; i<=k; i++){
                  if(n % i == 0){
            break;
           }
          }
          if(i > k){
           return true;
          }  
          return false;
         }
}
作者: 匿名    时间: 2011-7-25 20:02
[code]public class prime {
        public static void main(String[] args) {
          double i,count=0;
          for(i=101;i<200;i++)
           if(isPrime(i))
           {
                   System.out.print(i+" ");
                   count++;
            if(count%10==0)
               System.out.println();
            }
                  System.out.println("\n"+count);
        }
       
        private static boolean isPrime(double n)
        {
                 
               
      
                int i;
              for( i=2;i<=(int)Math.sqrt(n);i++)
              {

                      if(n%i==0)
                              return false;
                      if(i>n/2)
                              return true;
          
              }       
              return true;
   
          }
       
} [/code]
作者: 匿名    时间: 2011-7-26 10:36
标题: 回复 楼主 的帖子
public class prime
{
        public static void main(String[] args)
        {
                for(int n=101; n<=200; n++)
                {
                        boolean tag = true; // 假定n是素数
       
                        for(int i= 2;i<n;i++)
                        {
                                if(n%i==0)
                                {
                                        tag = false;
                                        break;
                                }
                        }
                       
                        //System.out.println(tag);
                        if(tag) System.out.println(n);
                }
                }
        }
这个简单点
作者: 匿名    时间: 2011-7-26 12:02
首先,通过运行可以知道,你这个程序一个数字都没有打,为什么?
因为if(isPrime(i))永远是false,它后面的语句就没有被执行过!

在你的isPrime()方法里面,你想一下中间那个if,一般情况下,一个大于4的数字被开平方后,不会比它的一半还要大,所以中间那个if就不会变成true !

你的程序中,只要把
if(i>=n/2)
   return true;
  else
这三行注释掉,最后返回一个true就可以了

还有双循环的方法可以参考:
int i,j,count=0;
  boolean t=true;
  for(i=100;i<=200;i++)
  {
   t=true;
   for(j=2;j<=(int)Math.sqrt(i);j++)
   {
    if(i%j==0)
    {
     t=false;
     break;
    }
   }
   if(t)
   {
    System.out.print(i+" ");
    count++;
    if(count%10==0)
     System.out.println();
   }
  }
  System.out.println("\n"+count); */




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2