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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李龙涛 黑马帝   /  2011-7-25 17:15  /  2156 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

问题描述:题目:判断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;
  
  }
}

我到底哪里写错了

评分

参与人数 1技术分 +2 收起 理由
admin + 2 不懂就问!

查看全部评分

4 个回复

倒序浏览
黑马网友  发表于 2011-7-25 17:51:03
沙发

龙涛 加油 黑马上认识的朋友

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;
         }
}

评分

参与人数 1技术分 +2 收起 理由
admin + 2 这是正确答案?

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-25 20:02:16
藤椅
[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]

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-26 10:36:59
板凳

回复 楼主 的帖子

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);
                }
                }
        }
这个简单点

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-26 12:02:28
报纸
首先,通过运行可以知道,你这个程序一个数字都没有打,为什么?
因为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); */

评分

参与人数 1技术分 +2 收起 理由
admin + 2 辛苦了!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马