由一定范围的质数的输出问题所得break、continue总结。

     以前课堂上学最基础的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+" ");

   }

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值