黑马程序员技术交流社区

标题: 基础回顾-求素数的小程序,读不懂了 [打印本页]

作者: 陈虹旭    时间: 2012-10-14 12:19
标题: 基础回顾-求素数的小程序,读不懂了
本帖最后由 陈虹旭 于 2012-10-15 09:48 编辑
  1. class Demo
  2. {
  3. public static void main(String[] args)
  4. {
  5. int n=0;
  6. boolean found;
  7. while(n<100)
  8. {
  9. n++;
  10. //判断n是否为素数
  11. //found=true;

  12. /*
  13. *从2循环到n,判断n是否被整除
  14. * 如果能够被整除,found设置为false
  15. */
  16. int j=2;
  17. while(j<n)
  18. {
  19. if(n%j==0)
  20. {
  21. //此时n一定不是一个素数
  22. found=false;
  23. break;//结束当前循环
  24. }
  25. j++;
  26. }


  27. //found==true,n是素数,否则n不是素数
  28. if(found)
  29. System.out.println(n);


  30. }

  31. }

  32. }
复制代码
一个简单的基础小程序,求素数的,可是在第二个while循环那里就看不懂了,主要是自己读不通,感觉自己读的有问题,请教大家帮忙读下程序!谢谢了
作者: 梁世喜    时间: 2012-10-14 12:33
本帖最后由 梁世喜 于 2012-10-14 12:42 编辑
  1. public static void Show(int x){
  2. if (x<=2)//2不为素数。
  3. return;
  4. boolean flag=true;//先假定输入的数字为素数
  5. int i=2;
  6. while(i<x){//循环检查
  7. if(x%i==0){//当对某一个数求余数。若余数为0 则表示x不为素数
  8. flag=false;
  9. break;
  10. }
  11. i++;
  12. }
  13. if(flag)
  14. {
  15. System.out.println(x+"是素数");
  16. }
  17. }
复制代码
你可以你的内层循环按我这个理解试试
作者: 黄小贝    时间: 2012-10-14 12:37
注释写的很清楚了~

建议楼主加上 System.out.println 等语句调试,看看每一次循环  i 和 j 值的变化~ 加油~
作者: 陈虹旭    时间: 2012-10-14 12:50
黄小贝 发表于 2012-10-14 12:37
注释写的很清楚了~

建议楼主加上 System.out.println 等语句调试,看看每一次循环  i 和 j 值的变化~ 加油 ...

我是新人,不太懂得如何用prinln调试,在哪里加println语句呢?
作者: 陈虹旭    时间: 2012-10-14 12:51
梁世喜 发表于 2012-10-14 12:33
你可以你的内层循环按我这个理解试试

不太懂...哎~
作者: 黄小贝    时间: 2012-10-14 13:04
陈虹旭 发表于 2012-10-14 12:50
我是新人,不太懂得如何用prinln调试,在哪里加println语句呢?

帮你加了几行print语句,你可以运行一下


public class Demo {
public static void main(String[] args) {
  int n = 0;
  boolean found = false;
  while (n < 100) {
   n++;
   System.out.println("此时 n = " + n);
   // 判断n是否为素数
   found = true;
   /*
    * 从2循环到n,判断n是否被整除 如果能够被整除,found设置为false
    */
   int j = 2;
   while (j < n) {
    if (n % j == 0) {
     // 此时n一定不是一个素数
     System.out.println("n的值为 " + n + ",能被" + j
       + "整除,所以不是素数,跳出循环");
     found = false;
     break;// 结束当前循环
    }
    j++;
   }
   // found==true,n是素数,否则n不是素数
   if (found) {
    System.out.println(n + "不能被任何小于 100 的整数整除");
   }
   System.out.println("-------------------------------");
  }
}
}

作者: 陈虹旭    时间: 2012-10-14 13:09
黄小贝 发表于 2012-10-14 13:04
帮你加了几行print语句,你可以运行一下

谢谢,我主要是搞不懂那个j++是什么意思,是不是不论if语句执行不执行,j++都会执行?j++起的是什么作用啊?
作者: 黄小贝    时间: 2012-10-14 13:14
陈虹旭 发表于 2012-10-14 13:09
谢谢,我主要是搞不懂那个j++是什么意思,是不是不论if语句执行不执行,j++都会执行?j++起的是什么作用 ...

比如 n = 100的时候

看他能不能被 2,3,4,... 到 100的数整除,这个数也就是 j

最初 j = 2,如果不能被2 整除,就 +1 变成3 ,依次类推
作者: 陈虹旭    时间: 2012-10-15 09:32
黄小贝 发表于 2012-10-14 13:14
比如 n = 100的时候

看他能不能被 2,3,4,... 到 100的数整除,这个数也就是 j

谢谢啊  明白了...
作者: 陈军    时间: 2012-10-15 14:39
首先你先别光记得看代码,自己先思考。
1,确定目的:输出0-n内的所有素数,
2,确定素数的特征,只能被1和本身整除,而且素数最小为2,
3,  解题思路: 1,遍历0~n的数
              2,遍历的同时判断是否是素数,判断是素数,就保存或者输出
              3,既然是判断素数就要 有算法。传递一个参数n ,遍历2到n-1的数,只要发现余数为0就return false;
下面再看你的代码就很OK了。

个人认为算法最主要是思想,只要思想印入脑海,有相应语言基础,写代码手到擒来。                 
作者: 陈虹旭    时间: 2012-10-15 15:21
陈军 发表于 2012-10-15 14:39
首先你先别光记得看代码,自己先思考。
1,确定目的:输出0-n内的所有素数,
2,确定素数的特征,只能被1和 ...

嗯 多谢...




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