以前课堂上学最基础的C语言的时候,就觉得循环语句的条件判断很难设置,尤其是输出有特殊要求的数据,而不是简单地一个大小范围时,感觉自己总是想不到,啊~原来这样设置就可以分辨了。这其中印象最深的就是质数的输出,曾经二级机试的时候最后一题还碰到过,因为记不得背过的题型还急的抓耳挠腮。现在想来,最重要的原因应该是没有理解吧。现在当然要理解着学习了。
例:输出0-300之间的质数。
分析:首先需要定义一个变量i,用来遍历0-300所有的数,然后至少需要再定义一个变量j,用来完成对i是否为质数的检测。然后0和1既不是质数,也不是合数.所以i可以从2开始测试;又质数是只能被1和它本身整除的数,所以j的初始化也该从2开始,若i为合数,则必然有大于2的数k能被它整除,即i/k>2,也就是数k存在的范围是k<i/2的,所以j的条件判断就是j<i/2;当i能被j整除时,则说明i肯定不为质数,不必继续检验,要跳出进行整除检验的内循环,换下一个i值来进行判断。此处continue label将跳转到外循环的标签label位置行进行下一轮的循环。
程序如下:
public class Continuetext {
public static void main(String[] args){
label: for(int i=2;i<=300;i++){
for(int j=2;j<=i/2;j++){
if(i%j==0){
continue label;
}
}
System.out.print(i+"\t");
}
}
}然后我又学习到基本的方法封装理论,所以自己尝试对以上特定范围的质数输出进行扩展,具体程序如下:
public class Continuetext01 {
public static void test(int a,int b){
int k;
if(a<2){
k=3;
}else{
k=a;} //讨论i的初始化值,避免非质数0、1的输出
outer: for(int i=k;i<=b;i++){
for(int j=2;j<i/2;j++){
if(i%j==0){
continue outer;
}
}
System.out.print(i+" ");
}
}
public static void main(String[] args){ //程序真正运行的部分
test(50,150); //输出50到150之间的质数
System.out.print("\n");
test(100,200); //输出100到200之间的质数
}
}学习continue自然也有break的相关用法。在switch语句中应用的明显:switch语句中,使用break的case穿透现象的防止与利用。
switch(表达式){
case 结果1:
-----;
break:
case 结果2:
-----;
break:
case 结果3:
-----;
break:
....
default:
-----;
break;
}
无break会从结果1开始依次运行每一个结果中所对应的Java语句,直至遇到break为止,即产生case穿透现象。但另一方面,对于产生相同结果的case,可以先列举完case,再共用一句Java语句来显示结果即可(间接利用case穿透):
case 结果1:
case 结果2:
case 结果3:
-----;
break;
case 结果4:
-----;
break;
以上学习心得总结如下:
break退出整个循环结构;continue终止某一次循环,不再执行该循环语句中位于continue语句后的执行语句,直接执行下一次循环。
带标签的break与continue有goto的作用。break, continue不加标签,只能跳出或者继续当前的循环。
以此为例说明:
outer: for(int i = 0; i <10; i++){
inter: for(int j = 0; j < i; j++){
if(j == 8){
break;//跳出j循环,执行j循环后的程序语句即输出i值然后继续i循环
break outer;//调出i循环,所有循环结束
break lable2;//跳出j循环,继续i循环
continue;//继续j循环
continue outer;//跳转到i循环,开始下一次循环
continue inter;//继续j循环
//以上三种的continue语句,均直接开始标签对应的for语句下一轮循环即不会输出i值
}
System.out.print(i+" ");
}
}
2425

被折叠的 条评论
为什么被折叠?



