public class Test5 { public static void main(String[] args) { int j; for(int i= 2;i<=200;i++){ j=2; while (i%j!=0){ j++; if(i==j){ System.out.println(i); } } } } }
自己的思想存在误区,受冒泡排序影响过甚
冒泡排序
public class demo{ public static void main(String[] args) { int[] numbers =new int[]{1,5,8,2,3,9,4}; int i ,j; for(i=0;i<numbers.length;i++){ for(j=0;j<numbers.length-1-i;j++){ if(numbers[j]<numbers[j+1]){ int tem = numbers[i]; numbers[j]=numbers[j+1]; numbers[j+1]=temp; } } } System.out.println("从大到小排序后的结果是:"); for(i=0;i<numbers.length;i++) System.out.print(numbers[i]+" "); } }
冒泡排序,总之遍历外层,然后相邻的数字两两比较,然后定制交换规则,两两交换,主要注意j的条件j<numbers.length-1-i即可
对于该题找出素数
错误思想的代码
public class Test8 { public static void main(String[] args) { for (int i=1;i<201;i++){ for(int j=1;j<i;j++){ if(i%j!=0){ System.out.println(i); } } } } }
输出一连串1到200的数,且有重复。
思想如果一个数从1到200,然后这个数除以从2到该数本身-1,如果整除没有0,则该数为素数。
后来仔细想了以下,如果i =6的时候,那么j可以为1到5,然后能让6除以1到5之间的数并且没有余数的只有当j=4,j=5的时候,所以会输出两次6。
所以这种遍历不合理,应该是当遍历到1-5的时候,当遍历到2的时候已经不满足条件,这个时候应该直接摒弃6,i的值+1,而不是再继续遍历,这样总会有不能整除的数,导致输出不是素数的6.
重新审视正确答案
外层依然遍历从2到200的数,内存循环换成while循环,while循环条件依然为i%j!=0,当满足这个条件之后,才可以j++,然后当i==j的时候,这个时候才可以输出i。
for循环和while循环的适用性(如果循环次数在执行循环体之前就已确定,一般用for语句;如果循环次数是根据循环体的执行情况确定的,一般用while语句或者do-while语句。)
注意赋值j要在外层循环下赋值,如果一开始直接int j=2;
原文地址:https://www.cnblogs.com/qiannianguyao/p/11886354.html
时间: 2024-10-10 13:29:16