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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈虹旭 中级黑马   /  2012-10-14 12:19  /  1603 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈虹旭 于 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循环那里就看不懂了,主要是自己读不通,感觉自己读的有问题,请教大家帮忙读下程序!谢谢了

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

10 个回复

倒序浏览
本帖最后由 梁世喜 于 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. }
复制代码
你可以你的内层循环按我这个理解试试

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
注释写的很清楚了~

建议楼主加上 System.out.println 等语句调试,看看每一次循环  i 和 j 值的变化~ 加油~
回复 使用道具 举报
黄小贝 发表于 2012-10-14 12:37
注释写的很清楚了~

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

我是新人,不太懂得如何用prinln调试,在哪里加println语句呢?
回复 使用道具 举报
梁世喜 发表于 2012-10-14 12:33
你可以你的内层循环按我这个理解试试

不太懂...哎~
回复 使用道具 举报
陈虹旭 发表于 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:04
帮你加了几行print语句,你可以运行一下

谢谢,我主要是搞不懂那个j++是什么意思,是不是不论if语句执行不执行,j++都会执行?j++起的是什么作用啊?
回复 使用道具 举报
陈虹旭 发表于 2012-10-14 13:09
谢谢,我主要是搞不懂那个j++是什么意思,是不是不论if语句执行不执行,j++都会执行?j++起的是什么作用 ...

比如 n = 100的时候

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

最初 j = 2,如果不能被2 整除,就 +1 变成3 ,依次类推
回复 使用道具 举报
黄小贝 发表于 2012-10-14 13:14
比如 n = 100的时候

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

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

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

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