最近刚学java时,有一个题目:
打印100到200之间所有的素数
第一判断100
第二次判断101....一直到200
旁边有个同学,写了程序后,发现没有输出结果,她就问我为什么?我当时一看,感觉好像没什么
问题啊,但是运行了,就是什么都没输出,我就郁闷了,当时她的代码是这样的:
public class Text_SuShu { /** * @param args */ public static void main(String[] args) { boolean suShu = true; for (int i = 100; i <= 200; i++) { for (int j = 2; j< i; j++) { if(i % j ==0) { suShu = false; break; } } if(suShu) { System.out.println(i); } } } }
我当时是经过调试了,发现了问题,她把 boolean suShu = true; 这个布尔型变量定义在for循环语
句外面,这样suShu的初始值为true,当进入for循环之后,第一次i = 100,因为100符合 if(i % j ==0)的条
件,这样suShu = false的值就变了,break后跳出了循环;在进行下次的循环时,因为suShu的值还是
false,都不符合下面两个if的条件,所以一直到循环结束,suShu的值都还是false,自然也就没有输出值了。
于是,经过修改后代码是这样的:
public class Text_SuShu { /** * @param args */ public static void main(String[] args) { for (int i = 100; i <= 200; i++) { boolean suShu = true;//位置的改变 for (int j = 2; j< i; j++) { if(i % j ==0) { suShu = false; break; } } if(suShu) { System.out.println(i); } } } }
这时如果有人说:博主凑字数的吧,这两个代码基本就差不多。我想说的这两个代码确实差不多,
但我不是凑字数,这两个代码只有一个地方不一样,那就是boolean suShu = true;声明的位置不一样,
上面一个代码是在for语句外面,而下面这个代码是在for语句里面,这样只是因为一个在里面一个在外
面,但是执行后的结构完全不一样,下面这个代码能正确输出100~ 200之间所有素数,这是为什么呢?
因为下面这个代码,进入内层for语句后,当有符合if(i % j ==0)这个条件的,suShu值变成flase,
但是内层循环结束的时候,又回到外层循环时,suShu的值又会被置成true,这样就保证了代码能正确执行。
这是我学习java时遇到的一个问题,希望对java初学者有所帮助。
时间: 2024-12-27 21:03:22