您好,欢迎访问代理记账网站
移动应用 微信公众号 联系我们

咨询热线 -

电话 15988168888

联系客服
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

Java控制流程

程序必须在执行过程中控制它的世界并做出选择。 在 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++) { 
        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 递增)。如果能够整除,则将值显示出来。

总结

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

躬身入Java,每天有进步,有你才狂热。欢迎关注公众号『 码农洞见 』


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进