Java控制流程

稜镜高阶
• 阅读 1169
程序必须在执行过程中控制它的世界并做出选择。 在 Java 中,你需要执行控制语句来做出选择。
在 Java 中,涉及的关键字包括 if-else,while,do-while,for,return,break 和选择语句 switch。

true和false

所有的条件语句都利用条件表达式的“真”或“假”来决定执行路径。举例:
a == b。它利用了条件表达式 == 来比较 a 与 b 的值是否相等。 该表达式返回 true 或 false。代码示例:

/**
* @author: 码农洞见
*/
public class TrueFalseCase {
    public static void main(String[] args) {
        System.out.println(1 == 0);
        System.out.println(1 == 1);
    }
}

输出结果:

 false 
 true

注意:在 Java 中使用数值作为布尔值是非法的,即便这种操作在 C/C++ 中是被允许的。如果想在布尔测试中使用一个非布尔值,那么首先需要使用条件表达式来产生 boolean 类型的结果,例如 if(a != 0)。

if-else

if-else 语句是控制程序执行流程最基本的形式。 其中 else 是可选的,因此可以有两种形式的 if。else if并非新关键字,它仅是else后紧跟的一条新if语句。

if(condition) {
    “statement” 
}

if(condition) {
     “statement”
}
else
     “statement”

if(condition) {
    “statement”
}else if(condition){
     “statement”
}else
     “statement”

迭代语句

while,do-while 和 for 用来控制循环语句(有时也称迭代语句)。只有控制循环的布尔表达式计算结果为 false,循环语句才会停止。

while

当条件为true时,while循环执行一条语句(也可以是一个语句块)。常用的格式为

while(Boolean-expression) 
  statement

执行语句会在每一次循环前,判断布尔表达式返回值是否为 true。下例可产生随机数,直到满足特定条件。

do-while

do-while 的格式如下:

do 
    statement
while(Boolean-expression);

while 和 do-while 之间的唯一区别是:即使条件表达式返回结果为 false, do-while 语句也至少会执行一次。 在 while 循环体中,如布尔表达式首次返回的结果就为 false,那么循环体内的语句不会被执行。实际应用中,while 形式比 do-while 更为常用。

for

for 循环可能是最常用的迭代形式。 该循环在第一次迭代之前执行初始化。随后,它会执行布尔表达式,并在每次迭代结束时,进行某种形式的步进。for 循环的形式是:

for(initialization; Boolean-expression; step)
  statement

初始化 (initialization) 表达式、布尔表达式 (Boolean-expression) ,或者步进 (step) 运算,都可以为空。每次迭代之前都会判断布尔表达式的结果是否成立。一旦计算结果为 false,则跳出 for 循环体并继续执行后面代码。 每次循环结束时,都会执行一次步进。

在 Java 中逗号运算符(这里并非指我们平常用于分隔定义和方法参数的逗号分隔符)仅有一种用法:在 for 循环的初始化和步进控制中定义多个变量。我们可以使用逗号分隔多个语句,并按顺序计算这些语句。注意:要求定义的变量类型相同。

for-in 语法

Java 5 引入了更为简洁的“增强版 for 循环”语法来操纵数组和集合。大部分文档也称其为 for-each 语法,但因为了不与 Java 8 新添的 forEach() 产生混淆,因此我称之为 for-in 循环。

for-in 无需你去创建 int 变量和步进来控制循环计数。 下面我们来遍历获取 float 数组中的元素。代码示例:

import java.util.*;
/**
* @author: 码农洞见
*/
public class ForInDoubleCase {
  public static void main(String[] args) {
      Random rand = new Random(34);
      double[] d = new double[5];
      for(int i = 0; i < 5; i++)
          d[i] = rand.nextDouble();
      for(double c : d)
          System.out.println(c);
  }
}

输出结果:

0.7282803491116691
0.32686830519411947
0.7463400680511447
0.018838172746085124
0.7038639881861897

上例中我们展示了传统 for 循环的用法。接下来再来看下 for-in 的用法。代码示例:

for(float x : f) {

这条语句定义了一个 float 类型的变量 x,继而将每一个 f 的元素赋值给它。

任何一个返回数组的方法都可以使用 for-in 循环语法来遍历元素。例如 String 类有一个方法 toCharArray(),返回值类型为 char 数组,我们可以很容易地在 for-in 循环中遍历它。代码示例:

/**
* @author: 码农洞见
*/
public class ForInStringCase {
  public static void main(String[] args) {
    for(char c: "An African Swallow".toCharArray())
      System.out.print(c + " ");
  }
}

输出结果:

A n   A f r i c a n   S w a l l o w

return

在 Java 中有几个关键字代表无条件分支,这意味无需任何测试即可发生。这些关键字包括 return,break,continue 和跳转到带标签语句的方法,类似于其他语言中的 goto。

return 关键字有两方面的作用:1.指定一个方法返回值 (在方法返回类型非 void 的情况下);2.退出当前方法,并返回作用 1 中值。我们可以利用 return 的这些特点来改写上例 IfElse.java 文件中的 test() 方法。代码示例:

/**
* @author: 码农洞见
*/
public class WithReturnCase {
  static int compare(int source, int target) {
    if(source > target)
      return +1;
    if(source < target)
      return -1;
    return 0;
  }

  public static void main(String[] args) {
    System.out.println(compare(1, 2));
    System.out.println(compare(2, 1));
    System.out.println(compare(1, 1));
  }
}

输出结果:

1
-1
0

这里不需要 else,因为该方法执行到 return 就结束了。

break 和 continue

在任何迭代语句的主体内,都可以使用 break 和 continue 来控制循环的流程。 其中,break 表示跳出当前循环体。而 continue 表示停止本次循环,开始下一次循环。

下例向大家展示 break 和 continue 在 for、while 循环中的使用。代码示例:

/**
* @author: 码农洞见
*/
public class BreakAndContinueCase {
  public static void main(String[] args) {
    for(int i = 0; i < 100; i++) { // [1]
        if(i == 88) break; // 跳出循环
        if(i % 9 != 0) continue; // 下一次循环
        System.out.print(i + " ");
    }
}

输出结果:

0 9 18 27 36 45 54 63 72 81 

在这个 for 循环中,i 的值永远不会达到 100,因为一旦 i 等于 88,break 语句就会中断循环。通常,只有在不知道中断条件何时满足时,才需要 break。因为 i 不能被 9 整除,continue 语句就会使循环从头开始。这使 i 递增)。如果能够整除,则将值显示出来。

swich 语法

switch源于C语言用在编程中,是一个判断选择代码(有时也被划归为一种选择语句)。其功能就是控制流程流转的。switch 语句可以从一系列代码中选出一段去执行。它的格式如下:

switch(integral-selector) {
    case integral-value1 : statement; break;
    case integral-value2 : statement;    break;
    case integral-value3 : statement;    break;
    // ...
    default: statement;
}

其中,integral-selector (整数选择因子)是一个能够产生整数值的表达式,switch 能够将这个表达式的结果与每个 integral-value (整数值)相比较。若发现相符的,就执行对应的语句(简单或复合语句,其中并不需要括号)。若没有发现相符的,就执行 default 语句。

在上面的定义中,大家会注意到每个 case 均以一个 break 结尾。这样可使执行流程跳转至 switch 主体的末尾。这是构建 switch 语句的一种传统方式,但 break 是可选的。若省略 break, 会继续执行后面的 case 语句的代码,直到遇到一个 break 为止。通常我们不想出现这种情况,但对有经验的程序员来说,也许能够善加利用。注意最后的 default 语句没有 break,因为执行流程已到了 break 的跳转目的地。当然,如果考虑到编程风格方面的原因,完全可以在 default 语句的末尾放置一个 break,尽管它并没有任何实际的作用。

switch 语法规则

switch语句非常有用,但在使用时必须谨慎。所写的任何switch语句都必须遵循以下规则:

只能针对基本数据类型中的整型类型使用switch,这些类型包括int、char等。对于其他类型,则必须使用if语句。
switch()的参数类型不能为实型 。
case 标签必须为字符串常量或字面量。
case标签必须是惟一性的表达式;也就是说,不允许两个case具有相同的值。

switch String 语法糖

Java 7 增加了在字符串上 switch 的用法。其实就是一个逻辑扩展的语法糖。新的编码方式能使得结果更清晰,更易于理解和维护。

总结

在语言设计之初,许多决策都是基于让编译器设计者的体验更好。 但在现代语言设计中,许多决策都是为了提高语言使用者的体验。下面通过思维导图回归一下Java控制流程的知识内容。
Java控制流程

最后的最后

为初学者提供学习指南,为从业者提供参考价值。我坚信码农也具有产生洞见的能力。扫描下图二维码关注,学习和交流!
Java控制流程

点赞
收藏
评论区
推荐文章
Karen110 Karen110
4年前
一篇文章带你了解JavaScript switch
Switch是与if...else...相同的条件语句,不同之处在于switch语句允许根据值列表测试变量是否相等。switch语句用于根据不同的条件执行不同的操作。一、Switch语句使用switch语句选择要执行的多个代码块中的一个。1\.语法switch(expression)casen:codeblock
Easter79 Easter79
3年前
Swift讲解专题六——流程控制
Swift讲解专题六——流程控制一、引言      一种编程语言的强大与否,很大程度上取决于其提供的程序流程控制方案,就如使用汇编语言实现复杂的程序流程是一件痛苦的事情。Swift中提供了许多强大的流程控制语句,例如快速遍历forin,while循环,repeatwhile循环,switch选择等,需
Wesley13 Wesley13
3年前
Java循环结构
Java循环结构for,while和do...while顺序结构的程序语句只能被执行一次。如果您想要同样的操作执行多次,就需要使用循环结构。while循环do...while循环for循环在Java5中引入了一种主要用于数组的增强
Wesley13 Wesley13
3年前
Java05
Java05Java基础语法(四)循环结构循环结构(重复/迭代):根据条件重复执行部分语句1、while循环结构while(条件表达式){     循环体语句;}1)语法:a、while是关键字        b、“条件表达式”必须用括号括起来        c、“{}”表示循环的控制范围,若没有“{}”,whil
Wesley13 Wesley13
3年前
Java知识系统回顾整理01基础05控制流程03 while
while和dowhile循环语句一、while:条件为true时重复执行只要while中的表达式成立,就会不断地循环执行!(https://oscimg.oschina.net/oscnet/f7f8d003013b0b12222c5a5cbd78fe0ca96.png)publicclassHelloWorld{
Wesley13 Wesley13
3年前
C语言二次系统学习3(分支循环、函数)
本次学习,主要针对语句和函数两部分进行学习。分支语句(if,switch)与循环语句(while,for,dowhile)switch语句中,在每个选择之后如果不进行break跳出,会执行下一个case,而且应注意default语句的使用,一般会放在{}代码块的后方dowhile语句中,会首先执行一次循环,再进行判定,所以使用相对较少。whi
小万哥 小万哥
1年前
C 语言中的 switch 语句和 while 循环详解
C语言中的switch语句替代多重if..else语句,可以使用switch语句。switch语句用于选择多个代码块中的一个来执行cswitch(表达式)casex://代码块break;casey://代码块break;default://代码块工作原理
小万哥 小万哥
1年前
C# 循环与条件语句详解
CSwitch语句使用switch语句选择要执行的多个代码块中的一个。示例:csharpswitch(expression)casex://代码块break;casey://代码块break;default://代码块break;它的工作方式如下:1.评估
小万哥 小万哥
1年前
Java break、continue 详解与数组深入解析:单维数组和多维数组详细教程
JavaBreak和ContinueJavaBreak:break语句用于跳出循环或switch语句。在循环中使用break语句可以立即终止循环,并继续执行循环后面的代码。在switch语句中使用break语句可以跳出当前case,并继续执行下一个case
小万哥 小万哥
1年前
C++ While 和 For 循环:流程控制全解析
CSwitch语句使用switch语句选择要执行的多个代码块之一。语法cppswitch(expression)casex://代码块break;casey://代码块break;default://代码块它的工作原理如下:switch表达式被评估一次
小万哥 小万哥
1年前
Kotlin 控制流和数组操作详解
Kotlin的when表达式提供了一种比if..else更清晰的方式来选择执行多个代码块之一,类似于Java的switch语句但更为强大和灵活。while循环允许在条件为真时重复执行代码块,而do..while循环则保证至少执行一次。break和continue可用于控制循环流程:前者终止循环,后者跳过当前迭代。数组则用于存储多个值,可以创建、访问、修改数组元素及遍历整个数组。这些构造使得编写简洁且高效的代码成为可能。