`
liuwei1981
  • 浏览: 753956 次
  • 性别: Icon_minigender_1
  • 来自: 太原
博客专栏
F8258633-f7e0-30b8-bd3a-a0836a5f4de5
Java编程Step-by...
浏览量:156540
社区版块
存档分类
最新评论

53.控制流程的关键字

 
阅读更多

使用break语句可以终止switch语句和终止循环的子语句块,甚至是普通的程序块。关于如何终止switch语句,前面已经说过。这里主要说明如何来控制循环语句的执行。

 

1.break语句

 

在循环中,经常的,我们需要在某种条件出现时,强行终止循环的运行,而不是等到循环的判断条件为false时,这个时候,可以通过break来完成这个功能。


下面来看一个break的例子:
 int sum1 = 0,n=10;
 for (int i=1;i<=n;i++){
  sum1=sum1+i;
  if(i%2==0)break;
 }


这个例子中,如果i能够被2整除,就跳出这个for循环。

 

因此,实际上,这个for循环只能循环两次,得到的sum1的值是3。

 

对于很多有C++或其他编程经验的读者,可能对于goto语句不会陌生,也可能曾经深受其困。在Java中,goto语句虽然是保留字,但并没有使用它。但在Java里也有类似goto的功能,这个功能和break以及continue结合。

 

在本质上而言,它和goto语句的跳跃是不同的,它是一种循环中断的方式而已。它和goto语句的相同点在于,它们都使用了标签(label)。


所谓标签(label),就是后面跟了一个冒号“:”的标识符,如:
oneLabel:


从语法上看,在Java程序中,标签可以放在任意的地方,但是,一般而言,标签只有放在循环语句之前,才能真正起到应有的作用,如下:
LableOne:
循环
{
… …
}


我们来看一个用在嵌套循环中的和标签结合的break例子:
  outer:
  for(int i = 0;i<10;i++) {
   System.out.println("Outer loop:");
   inner:
    while(true) {
     int k = System.in.read();
     System.out.println("Inner Loop:"+k);
     if(k=='b') break inner;
     if(k=='q') break outer;
    }
  }

在这个例子中,从控制台接收一个输入,如果输入b,则退出内层的while循环,如果输入q则退出外层的循环(也就是终止整个循环)。

 

另外,如果需要终止普通的语句块(既不是switch也不是循环语句),则必须使用标签:


Label1:
 {
 Label2:
  {
  Lable 3:
   {
   …. …
   }
  }
 }

 

2.continue语句

 

continue语句用来略过循环中剩下的语句,重新开始新的循环,这和break语句的完全跳出循环是不一样的。


continue 仅仅出现在while/do…while/for语句的子语句块中。


也可以使用和标签结合的方式来选择需要终止的嵌套循环的层级。


下面来看一个例子:
 int sum1=0;                    
 int sum2=0;                    
 //Continue                     
 for (int j=1;j<=10;j++)  {                              
  if(j%2==0)continue;    
  sum2=sum2+j;           
 }                              
 System.out.println(sum2); 


在这个例子中,如果在j可以被2整除,则不进行后面的相加操作,而重新返回到循环的开头

 

因此,它运算后的值为:25。完整的代码请参考示例4-11中的BreakAndContinue.java中的Continue部分。

在上一小节介绍break的时候,我们就提到过,在continue中也可以使用标签。

 

现在我们来看一个continue和标签结合的例子:

源文件:ContinueWithLabelDemo.java
public class ContinueWithLabelDemo {
 public static void main(String[] args) {
  String searchMe = "Look for a substring in me";
  String substring = "subs";
  boolean foundIt = false;

  int max = searchMe.length() - substring.length();

  test: for (int i = 0; i <= max; i++) {
   int n = substring.length();
   int j = i;
   int k = 0;
   while (n-- != 0) {
    if (searchMe.charAt(j++) != substring.charAt(k++)) {
     // 跳出的本次循环是for循环,而不是while循环
     continue test;
    }
   }
   foundIt = true;
   // 跳出整个循环
   break test;
  }
  System.out.println(foundIt ? "Found it" : "Didn't find it");
 }
}


这个程序的作用是从字符串searchMe中搜索指定的子串substring,从要搜索的字符串substring(假设为“subs”)第一个子符开始去匹配searchMe的第一个字符,如果第一个字符都不匹配,就不用再比较第二个字符了(利用continue)。

 

如果第一个字符匹配,则比较第二个字符,如果第二个字符不匹配,则不用再往下比较,否则,往下比较第三个字符,依次类推。

 

如果找到完全匹配的子字符串,则退出整个循环(break)并且返回true。然后根据是否返回true打印出“Found it”或“Didn’t find it”。


如果substring的值为“subs”(如程序中所示),则会在控制台上打印出“Found it”,如果substring的值为“abc”,则会打印出“Didn’t find it”。

分享到:
评论

相关推荐

    C#快速入门宝典及开发手册

    六、流程控制语句; 七、变量和常量; .......... 第四部分:深入了解C# .......... 接口; 文件操作; 注册表编程; 版本控制; 代码优化; 第五部分:附录 ........ 关键字; 错误码; 参考资料;

    C# 快速入门必备教程

    六、流程控制语句; 七、变量和常量; .......... 第四部分:深入了解C# .......... 接口; 文件操作; 注册表编程; 版本控制; 代码优化; 第五部分:附录 ........ 关键字; 错误码; 参考资料;

    Java OOP.mmap

    目录: 一、Java 概述 ...三、引用数据类型、流程控制语句 和 数组 1. 引用数据类型 2. 流程控制语句 3. 数组 四、方法 1. 引入 2. 语法格式 3. 方法调用 4. 注意事项 5. 方法重载 6. 可变参数列表

    QTP_8_用户手册中文版

    第=f=部分:=启动测试流程 第=N=章:=简介.........................................................................................3 使用QuickTest 进行测试...................................................

    Alfred_4.0.9_1144.dmg 通过热键,关键字,文本扩展等功能提高您的效率

    将热键,关键字和操作链接在一起以创建自己的工作流程;无需编写任何代码即可创建工作流。来自我们创建者社区共享的成千上万个导入工作流。 你是老板通过使用Alfred与macOS的深度集成来控制Mac,从而提高工作效率。...

    JavaSE 03.流程控制习题课代码加答案(有很详细的注解)

    里面的代码都是流程控制相关的练习题, 如: 分支结构(if语句, switch语句), 循环结构(for循环, while循环, do-while循环), 跳转关键字:break、continue, Random类:生成随机数 案列有: 1. 某银行推出了整存整取定期...

    JAVA核心知识点整理(有效)

    1. 目录 1. 2. 目录 .........................................................................................................................................................1 JVM ........................

    46个java关键字介绍和使用大全含示例(值得珍藏)

    这些关键字包括数据类型关键字(如int、float、char等)、流程控制关键字(如if、else、while等)、访问控制关键字(如public、private、protected等)、异常处理关键字(如try、catch、finally等)以及其他一些特殊...

    Python3.2.3官方文档资料中文版

    第二章 更多控制流程语句.............................................................................................................18 2.1 if 语句.........................................................

    C语言的32个关键字合集大全

    C语言的32个关键字大全 第一类:数据类型关键字 { A基本数据类型;B类型修饰关键字;C复杂类型关键字;D存储级别关键字} 第二类:流程控制关键字{A跳转结构;等}

    GIT中文资源

    1.1 关于版本控制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.1 本地版本控制系统 . . . . . . . . . . . . . . . . . . . . . . 1 1.1.2 集中化的版本控制系统 . . . . . . . . . . . . . . ....

    [Visual.Basic.2010.入门经典(第6版)].Thearon.Willi等.扫描版(1/2)

    第4 章 流程控制 .................................. 69 4.1 作出决策 .................................... 69 Visual Basic 2010 入门经典( 第6 版) X 4.2 If 语句 .....................................

    C语言关键字

    关于C的关键字解释 比较详细。 1、基本数据类型 2、类型修饰关键字 3、复杂类型关键字 4、存储级别关键字 5、流程控制关键字

    GPU编程与 CG语言 中文版(1)

    第5章 CG数据类型................................................................................................53 5.1 基本数据类型.......................................................................

    C语言编程宝典.exe

    输入输出函数及控制流程语句 文件的输入输出函数 控制流程语句 指针、结构、联合和枚举 结 构(struct) 联 合(union) 枚 举(enum) 函数 Turbo C 程序设计初步 二,函数篇 屏幕函数 图形函数 (以下按字母顺序...

    RFID生产线管理

    简介: RFID生产线管理 为达到 ISO 9000 的要求,各制造商不得不更好地跟踪在制产品信息和质量控制流程,其根本目的也就是要生产出质量更好的产品,同时降低生产成本。实施RFID有不可缺少的实现途径。 RFI ...  ...

    C语言简明教程(编辑成页)

    C语言简明教程 一、基础篇 ...输入输出函数及控制流程语句 文件的输入输出函数 控制流程语句 函数 Turbo C 程序设计初步 指针、结构、联合和枚举 结 构(struct) 联 合(union) 枚 举(enum)

    Java笔记1

    1. Java 程序运行机制 2. 注释 3. 标志符和关键字 4. 数据类型 5. 运算符 6. 流程控制 7. 数组 8. 理解面向对象概念 9. Java

    古老的C语言编程宝典之一

    语言编程宝典之一 ...输入输出函数及控制流程语句 文件的输入输出函数 控制流程语句 指针、结构、联合和枚举 结 构(struct) 联 合(union) 枚 举(enum) 函数 Turbo C 程序设计初步 二,函数篇 屏幕函数 图形函数

    FullStack-Student-Mgt-App:I我在MySQL数据库上使用Sequelize ORM构建的NodeReact应用程序; 管理大学生,课程注册和退学。 您可以以管理员身份登录并向学生发送课程邀请函,创建新课程并让学生担任这些课程的教职员工

    注意: Async / Await语法用于按顺序控制程序中所有Javascript承诺的并发流程。用法使用以下代码启动此应用。 npm installnpm start || node src/server/app.js 完成之后,您应该可以使用standard程序了。 请检查根...

Global site tag (gtag.js) - Google Analytics