博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
控制流程
阅读量:5157 次
发布时间:2019-06-13

本文共 5591 字,大约阅读时间需要 18 分钟。

 

  Java的控制流程用于使程序按正确的顺序逐步进行,为程序提供了运行方向。分为选择类控制流程和循环类控制流程。

选择类控制流程

if-else流程

  if-else流程是最基本的选择类控制流程。格式为:if (expr) statement1; [else statement2;]。expr是逻辑表达式,如果为true,则执行statement1;如果为false则不执行,如果有else子句,则执行statement2。

  默认情况下else子句会与最近的if子句配对,可以使用“{ }”来表示else子句与哪一个if子句匹配。例如:

1 @Test 2 void testIfelse() { 3     int a = 6, b = 7; 4     if (a < 0)  5         if (a < b)  6             a = b; 7         else    // 与if (a < b)配对 8             b = a; 9     System.out.println("a = " + a);10     System.out.println("b = " + b);11     System.out.println();12     a = 6;13     b = 7;14     if (a < 0) {15         if (a < b) 16             a = b;17     }18     else    // 与if (a < 0)配对19         b = a;20     System.out.println("a = " + a);21     System.out.println("b = " + b);22 }
testIfelse

  输出结果:

  

  很明显,第一个if-else流程的else子句与if (a < b)配对;为了使else子句与if (a < 0)配对,需要加入“{ }”。

  if-else流程有两种嵌套:

  1.if (expr1) statement1;  else if (expr2) statement2;  else statement3;

  2.if (expr1) { if (expr2) statement1; else statement2;}  else statement3;

switch流程

  switch流程适用于多种选择的情况。格式为:switch (expr) { case val1 : statement1;  case val2 : statement2; ... [default : statement3;]}

  switch根据表达式expr的值选择对应的case块,如果没有一个case块与之匹配且有default块,则进入default块。

  switch中case块或default块需要用break语句来退出程序,如果该程序块是switch的最后一个块则不用break语句。

  default块可以放在任何位置,并不一定是在最后,但通常情况下default块都放在最后。

  欲使得多个case块执行同一段程序,则只需声明前面几个case块,再最后一个case块写入程序。

  switch有一个特点:在一个case块中声明的变量只能在该case块中使用,但是在其他case块不能声明同名变量。

1 @Test 2 void testSwitch() { 3     String s = "Mon"; 4     String str; 5     switch (s) { 6         case "Mon" :  7             str = "Monday"; 8             break; 9         case "Tue" : 10             str = "Tuesday";11             break;12         case "Wed" : 13             str = "Wednesday";14             break;15         case "Thu" : 16             str = "Thursday";17             break;18         case "Fri" : 19             str = "Friday";20             break;21         case "Sat" : 22             str = "Saturday";23             break;24         case "Sun" : 25             str = "Sunday";26             break;27         default : 28             str = "No Result";29     }30     System.out.println(str);31 }
testSwitch

  输出结果:

  

  JDK12版本新增了一种switch表达式,使得switch语句的格式变得更加美观。格式为:switch (expr) { case val1 -> {statement1;} case val2 -> {statement2;} ... [default -> {statementN;}]}

  switch表达式会根据expr的值执行对应的case块后面“{ }”括起来的语句,没有与之匹配的case块,若存在default块,则执行default块。

  由于用“{ }”括起了每一块的语句,无需再使用break语句来退出程序。如果只有一个语句可不加“{ }”。

  switch表达式允许一个case块有多个值,只需要用“,”将各个值分开即可。表示当expr为这些值的其中之一时执行该case块。

  上面的程序使用switch表达式可以改为:

1 @SuppressWarnings("preview") 2 @Test 3 void testSwitch() { 4     String s = "Mon"; 5     String str; 6     switch (s) { 7         case "Mon" -> str = "Monday"; 8         case "Tue" -> str = "Tuesday"; 9         case "Wed" -> str = "Wednesday";10         case "Thu" -> str = "Thursday";11         case "Fri" -> str = "Friday";12         case "Sat" -> str = "Saturday";13         case "Sun" -> str = "Sunday";14         default -> str = "No Result";15     }16     System.out.println(str);17 }
testSwitch

  输出结果:

  

  switch表达式可以直接返回值。格式为:type value = switch (expr) { case val1 -> value1; case val2 -> value2; ... default -> valueN;};

  上面的程序可以再改的更加美观:

1 @SuppressWarnings("preview") 2 @Test 3 void testSwitch() { 4     String s = "Mon"; 5     String str = switch (s) { 6         case "Mon" -> "Monday"; 7         case "Tue" -> "Tuesday"; 8         case "Wed" -> "Wednesday"; 9         case "Thu" -> "Thursday";10         case "Fri" -> "Friday";11         case "Sat" -> "Saturday";12         case "Sun" -> "Sunday";13         default -> "No Result";14     };15     System.out.println(str);16 }
testSwitch

  输出结果:

  

循环类控制流程

  循环类控制流程的作用是,由循环初始、循环迭代、循环结束三部分控制,重复执行循环体。

for流程

  for流程的格式为:for (初始; 结束; 迭代) { 循环体 }

  初始部分和迭代部分可以用“,”隔开多个部分,而结束部分是一个逻辑表达式,用于判断结束循环的时机。

  可以在初始部分中声明变量,该变量只能在当前for流程中使用。

foreach流程

  foreach流程是一种增强的for流程,适用于数组或Collection类对象的遍历。格式为:for (type item : items) { 循环体 }

  items是数组或Collection类对象,而item代表items的元素,所以item的类型type为items中的元素类型。

while流程

  while流程的格式为:初始;   while (结束) { 循环体;  迭代;}

  进入while流程时会先进行一次结束判断,为true才进入循环。

do-while流程

  do-while流程的格式为:初始;  do { 循环体;  迭代;} while (结束);

  进入do-while流程时会先进行一次循环,再进行结束判断。

区别

  for流程和while流程都是先判断后执行,而do-while流程是先执行后判断。例如:

1 @Test 2 void testCirculation() { 3     int i; 4     // for 5     for (i = 0; i < 0; i++) ; 6     System.out.println("for流程:" + i); 7     // while 8     i = 0; 9     while (i < 0) {10         i++;11     }12     System.out.println("while流程:" + i);13     // do-while流程14     i = 0;15     do {16         i++;17     } while (i < 0);18     System.out.println("do-while流程:" + i);19 }
testCirculation

  输出结果:

  

  for流程和while流程都是先判断,由于i<0为false,不进入循环,未执行i++语句,所以输出的i的值都是初始值0。而do-while流程是先执行,所以会执行一次i++语句,所以输出的i的值是1。

退出流程

  可以使用break和continue语句来退出流程。

  break语句是退出整个循环流程;continue语句是退出当前循环,进入下一次循环。

  Java允许在循环程序块前使用标号标识,然后在break语句或continue语句后使用该标号,表示退出该循环。该方法一般在需要退出多层循环时使用。例如:

1 @Test 2 void testLabel() { 3     int i = 0, j = 0; 4     for (i = 0; i < 3; i++)  5         for (j = 0; j < 5; j++) { 6             if (j == 2) break; 7         } 8     System.out.println("i = " + i); 9     System.out.println("j = " + j);10     System.out.println();11     outer : for (i = 0; i < 3; i++) 12         for (j = 0; j < 5; j++) {13             if (j == 2) break outer;14         }15     System.out.println("i = " + i);16     System.out.println("j = " + j);17 }
testLabel

  输出结果:

  

  第一段for流程中的break语句退出的是内层的for流程,所以外层的for流程会继续执行,直到i=3为止。而第二段for流程中的break语句退出的是标有outer标号的for流程,即外层的for流程,所以i=0。

转载于:https://www.cnblogs.com/lqkStudy/p/10987961.html

你可能感兴趣的文章
LeetCode Ones and Zeroes
查看>>
基本算法概论
查看>>
jquery动态移除/增加onclick属性详解
查看>>
JavaScript---Promise
查看>>
暖暖的感动
查看>>
Java中的日期和时间
查看>>
Django基于admin的stark组件创建(一)
查看>>
PAT L2-016 愿天下有情人都是失散多年的兄妹
查看>>
抛弃IIS,利用FastCGI让Asp.net与Nginx在一起
查看>>
C. Tanya and Toys_模拟
查看>>
springboot jar包运行中获取资源文件
查看>>
基于FPGA实现的高速串行交换模块实现方法研究
查看>>
Java Scala获取所有注解的类信息
查看>>
delphi ,安装插件
查看>>
case when then的用法-leetcode交换工资
查看>>
11.28.cookie
查看>>
BeanShell简介
查看>>
python字符串操作
查看>>
MySQL学习之备份
查看>>
不同程序语言的注释和变量要求
查看>>