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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

刚入基础班,以前从来没接触过这东西,每次敲代码都能把自己敲晕,尤其是这次这个算素数,真的把自己绕晕的不要不要的。最后在基友的帮助下终于把思路理成功了!!!
第一种,用for循环嵌套for循环。(我就是敲这个代码把自己敲晕的,最后终于理解了,就又重新取演变了第二种和第三种)但是这种方法取不出2,不知道怎么把2给弄出来:
  1. class sushu{
  2.         public static void main(String[] args)        {
  3.                 for (int a = 2;a <= 100;a++ ) {                   //因为1不是任何数,从2开始
  4.                         for (int y = 2;y < a;y++ ) {           //因为素数可以被自身整除,所以可以排除自身的数,所以y小于a,不用等于a
  5.                                 if (a % y == 0) {     //a%y的值等于0,说明不是素数,就跳出循环。不等于0就不执行本句
  6.                                         break;
  7.                                 }
  8.                                 else if (a == y+1) {        //判断a的值是否等于y加1,因为条件定义y永远小于a的值
  9.                                         System.out.println(a);      //但是y的值循环到比a小1的话,y加上1刚好能相等
  10.                                         break;
  11.                                 }
  12.                                 else {              //如果a%y既不等于0,也不相等,就继续判断,此处可写可不写
  13.                                 
  14.                                 }
  15.                         }
  16.                         
  17.                 }
  18.                  
  19.         }
  20. }
复制代码

第二种,for嵌套while。因为while循环结束后定义的值还能继续使用,而不像for结束后值就被释放了,所以用while可以这样写。
  1. class sushu1{
  2.         public static void main(String[] args)        {  
  3.                 for (int x = 2;x <= 100;x++ ) {                   //因为1不是任何数,从2开始
  4.                         int y = 2;                                         
  5.                         while (x > y) {                                 //如果x大于y 进入循环
  6.                                 if (x % y == 0) {                   //如果x%y等于0,则不是素数,则跳出循环。
  7.                                         break;
  8.                                 }
  9.                                 y++;                                 //否则就是不等于0,y就自增1,然后继续循环
  10.                                 }
  11.                                 if (x == y) {                 //当循环结束就会判断x和y是否相等,相等就说明在循环语句里面一直%不尽,直到超出了判断。
  12.                                 System.out.println(x);
  13.                         }
  14.                
  15.                         
  16.                 }
  17.                  
  18.         }
  19. }
复制代码

第三种,就用一个while循环。本来是用do while实现的,但是发现直接用while代码一样,根本不用变。所以很疑惑do while到底和while有什么区别。
  1. class sushu2 {
  2.         public static void main(String[] args)        {
  3.                         int x = 2,y = 2;
  4.                         while (x <= 100) {                       //x最大到100就停止循环了,但是没有定义y最大值,所以看下面
  5.                                 if (x % y != 0) {                     //如果x%y不等于0,说明y没有磨够
  6.                                         y++;                            //y就自增1
  7.                                         continue;                   //然后continue结束本次循环,回到while处继续循环
  8.                                 }
  9.                                 else if (x == y) {                  //如果x被y磨够了,那么它们肯定是相等的,所以就输出
  10.                                 System.out.println(x);
  11.                                 }
  12.                                 x++;                                  //然后x自增1.接着把y的值重新赋值到2
  13.                                 y = 2;        
  14.                         }


  15.         }
  16. }
复制代码
      思想一乱就好难敲代码了,所以给一起努力学习java的小黑们一个建议,就是每敲一行代码就在后面注释一下,然后自己一旦敲晕了,就看注释,会知道自己卡在哪里了,我一个人默默的算素数的时候就是没有注释,导致自己算了2天才弄懂,绕的自己差点连1+1等于几都得忘记了。

23 个回复

正序浏览
//程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),
//如果能被整除, 则表明此数不是素数,反之是素数。
public class ShuShu {
        public static void main(String[] args) {
                for (int i = 1; i <= 100; i++) {
                        if (isPrime(i)) {
                                System.out.println(i);
                        }
                }
        }
        // 判断素数的方法,如果是素数,返回true。
        private static boolean isPrime(int n) {
                if (n >= 1 && n <= 3) {
                        return true;
                } else {
                        for (int i = 2; i <= Math.sqrt(n); i++) {
                                if (n % i == 0) {
                                        return false;
                                }
                        }
                }
                return true;
        }
}
回复 使用道具 举报
新人贴,赞一个,
回复 使用道具 举报
一晃眼一半课程过去了
回复 使用道具 举报
真厉害,我马上也要去基础班了,好忐忑啊
回复 使用道具 举报
太厉害了,已经收藏
回复 使用道具 举报
- - 看了二楼我才懂了传说中的素数
回复 使用道具 举报
while和do...while的区别就是后者最少执行一次,而前者不满足一次都不执行
回复 使用道具 举报
学习中。。。。。。。。。。。
回复 使用道具 举报
楼主,while是先判断再运行,do while是先运行一次再判断是否继续运行,区别还是有的
回复 使用道具 举报
前进…… 来自手机 中级黑马 2015-10-4 18:47:53
14#
这道题我都没敢做,看别人敲的代码都看不懂,还得多学习啊!
回复 使用道具 举报
becky_ny 来自手机 中级黑马 2015-10-4 18:47:27
13#
王子墨 发表于 2015-10-3 15:49
刚入基础班,以前从来没接触过这东西,每次敲代码都能把自己敲晕,尤其是这次这个算素数,真的把自己绕晕的 ...

太牛掰了
回复 使用道具 举报
总结的不错,学习了。
回复 使用道具 举报
不错,很好!
回复 使用道具 举报
看看         
回复 使用道具 举报
学习啦                           
回复 使用道具 举报
路过,顶一个
回复 使用道具 举报
有学习啦
回复 使用道具 举报
学习一下。。。。。
回复 使用道具 举报
感谢楼主提供的思路,学习一下,手动点赞
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马