刚入基础班,以前从来没接触过这东西,每次敲代码都能把自己敲晕,尤其是这次这个算素数,真的把自己绕晕的不要不要的。最后在基友的帮助下终于把思路理成功了!!!
第一种,用for循环嵌套for循环。(我就是敲这个代码把自己敲晕的,最后终于理解了,就又重新取演变了第二种和第三种)但是这种方法取不出2,不知道怎么把2给弄出来:
- class sushu{
- public static void main(String[] args) {
- for (int a = 2;a <= 100;a++ ) { //因为1不是任何数,从2开始
- for (int y = 2;y < a;y++ ) { //因为素数可以被自身整除,所以可以排除自身的数,所以y小于a,不用等于a
- if (a % y == 0) { //a%y的值等于0,说明不是素数,就跳出循环。不等于0就不执行本句
- break;
- }
- else if (a == y+1) { //判断a的值是否等于y加1,因为条件定义y永远小于a的值
- System.out.println(a); //但是y的值循环到比a小1的话,y加上1刚好能相等
- break;
- }
- else { //如果a%y既不等于0,也不相等,就继续判断,此处可写可不写
-
- }
- }
-
- }
-
- }
- }
复制代码
第二种,for嵌套while。因为while循环结束后定义的值还能继续使用,而不像for结束后值就被释放了,所以用while可以这样写。
- class sushu1{
- public static void main(String[] args) {
- for (int x = 2;x <= 100;x++ ) { //因为1不是任何数,从2开始
- int y = 2;
- while (x > y) { //如果x大于y 进入循环
- if (x % y == 0) { //如果x%y等于0,则不是素数,则跳出循环。
- break;
- }
- y++; //否则就是不等于0,y就自增1,然后继续循环
- }
- if (x == y) { //当循环结束就会判断x和y是否相等,相等就说明在循环语句里面一直%不尽,直到超出了判断。
- System.out.println(x);
- }
-
-
- }
-
- }
- }
复制代码
第三种,就用一个while循环。本来是用do while实现的,但是发现直接用while代码一样,根本不用变。所以很疑惑do while到底和while有什么区别。
- class sushu2 {
- public static void main(String[] args) {
- int x = 2,y = 2;
- while (x <= 100) { //x最大到100就停止循环了,但是没有定义y最大值,所以看下面
- if (x % y != 0) { //如果x%y不等于0,说明y没有磨够
- y++; //y就自增1
- continue; //然后continue结束本次循环,回到while处继续循环
- }
- else if (x == y) { //如果x被y磨够了,那么它们肯定是相等的,所以就输出
- System.out.println(x);
- }
- x++; //然后x自增1.接着把y的值重新赋值到2
- y = 2;
- }
- }
- }
复制代码 思想一乱就好难敲代码了,所以给一起努力学习java的小黑们一个建议,就是每敲一行代码就在后面注释一下,然后自己一旦敲晕了,就看注释,会知道自己卡在哪里了,我一个人默默的算素数的时候就是没有注释,导致自己算了2天才弄懂,绕的自己差点连1+1等于几都得忘记了。
|
|