关于java:Java控制流程

83次阅读

共计 4343 个字符,预计需要花费 11 分钟才能阅读完成。

程序必须在执行过程中管制它的世界并做出抉择。在 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,每天有提高,有你才狂热。欢送关注公众号『码农洞见』

正文完
 0