黑马程序员技术交流社区

标题: 程序有个小问题,请赐教。 [打印本页]

作者: Friends★    时间: 2012-4-25 20:57
标题: 程序有个小问题,请赐教。
写了一个求素数的小程序,可以结果就是出不来,请帮我改一改!


public class Test10 {
public static void main(String[] args) {
          int count = 0;
      for(int i=2;i<100;i++){
              boolean  b=false;
              for(int j=1;j<=i-1;j++){
                    if(i % j == 0) {
                            b = false;
                            break;
                            }  
                     else   {
                             b = true;
                             }
                 }
          if(b == true) {
                  count ++;
                  System.out.println(i );
                  }
      }
          System.out.print( "素数个数是: " + count);
}
}
作者: 刘基军    时间: 2012-4-25 22:05
  1. public static void main(String[] args) {
  2.                 int count = 0;
  3.                 for(int i=2;i<100;i++){
  4.                         boolean  b=false;
  5.                         for(int j=2;j<=i-1;j++){  //从2开始,而不是1
  6.                                 if(i % j == 0) {
  7.                                         b=true;
  8.                                         break;
  9.                                 }                                     
  10.                         }
  11.                         if(!b) {
  12.                                 count ++;
  13.                                 System.out.print(i+"  ");
  14.                         }
  15.                 }
  16.       System.out.print( "素数个数是: " + count);                
  17.         }
复制代码

作者: 王德南    时间: 2012-4-25 22:17
本帖最后由 王德南 于 2012-4-25 22:18 编辑
  1. int count = 0;
  2.          for(int i=2;i<100;i++){
  3.                  boolean  b=false;
  4.          System.out.println("i="+i);//在这里加了一个打印i的语句你可以很清楚地看到i的值的变化
  5.                  for(int j=1;j<=i-1;j++){     //这里要改为for(int j=2;j<=i-1;j++)
  6.                          System.out.println("j="+j);//在这里加了一个打印j的语句你可以很清楚地看到j的值的变化,
  7.                                                 //你会发现j的值总是为1所以这时候任何数除以1的
  8.                                                     //余数都为0所以break就会跳出这个for循环,所以一直这样下去结果就会输出:0
  9.                                                    //所以你上面的for语句要改为for(int j=2;j<=i-1;j++)
  10.                            if(i % j == 0) {
  11.                            b = false;
  12.                             break;
  13.                                }  
  14.                         else   {
  15.                                 b = true;
  16.                                 }
  17.                     }
  18.              if(b == true) {
  19.                      count ++;
  20.                      System.out.println(i );
  21.                      }
  22.          }         
复制代码

作者: 林德燚    时间: 2012-4-25 22:34
  1. public static void main(String[] args) {
  2.                           int count = 0;
  3.                       for(int i=2;i<100;i++){
  4.                                boolean  b=false;
  5.                                                 //  for(int j=1;j<=i-1;j++){
  6.                                                       //     if(i % j == 0) {//错误在这,你这从1开始,每个都可以除摸0;

  7.                                for(int j=1;j<=i;j++){
  8.                                      if(i % j == 0&&j!=1&&j!=i) {//在你基础上这样改就可以了,
  9.                                              b = false;
  10.                                             break;
  11.                                              }  
  12.                                       else   {
  13.                                              b = true;
  14.                                              }
  15.                                  }
  16.                           if(b == true) {
  17.                                    count ++;
  18.                                    System.out.println(i );
  19.                                    }
  20.                       }
  21.                           System.out.print( "素数个数是: " + count);
  22.                
复制代码
}
作者: 马浩    时间: 2012-4-25 22:54
判断i是否为素数,不应该是看在2与i/2之间是否有能将i整除的吗??如果没有,则i为素数,这 样一来楼主的for循环中的条件我就不 懂了
我改了一下
{
        public static void main(String[] args)
        {
                int count = 0;

        for(int i=2;i<=100;i++)
                {
                        boolean b=true;
                        for(int j=2;j<=i/2;j++)//这个判断条件与楼主不同
                        {
                                if((i%j)==0)
                                        {
                                                b=false;
                                                break;
                                        }
                        }
                                if(b)
                                {
                                count++;
                                System.out.print(i);
                                System.out.print(" ");
                               
                                }
                                //System.out.println();
                }
                System.out.println();
                System.out.println("素数的个数是:"+count);
        }

}
作者: 徐鑫    时间: 2012-4-25 23:31
运行了下。素数又叫质数(我们都说质数,还去百度了下素数...)

public class Test10 {
public static void main(String[] args) {
          int count = 0;
      for(int i=2;i<100;i++){
              boolean  b=false;
              for(int j=1;j<=i-1;j++){
                    if(i % j == 0) {//这里进行取余判断的时候应该从2开始,每个数除以1都没有余数- =!
                            b = false;
                            break;
                            }  
                     else   {
                             b = true;
                             }
                 }
          if(b == true) {
                  count ++;
                  System.out.println(i );
                  }
      }
          System.out.print( "素数个数是: " + count);
}
}




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