控制语句与执行流程

1,if-else

if-else语句是控制程序流程的最基本的形式。else是可选的。ifelse后面跟的是用分号结尾的简单语句。下面的test()方法简单阐述if-else的表现形式及其现象。

public class test {
    static int result = 0;
    static void test(int number1, int number2){
        if(number1 > number2)
            result = +1;
        else if(number1 < number2)
            result = -1;
        else
            result = 0;
    }
    public static void main(String[] args) {
        test(10, 5);
        System.out.println(result);
        test(5, 10);
        System.out.println(result);
        test(5, 5);
        System.out.println(result);
    }
}
  • 输出内容为:
    1
    -1
    0
  • 其中在test()中间部分可以看到一个“else-if”,这个是一个else后面紧跟另一个新的if语句。

2,迭代

  • while、do-whilefor用来控制循环,有时将他们划分为迭代语句。语句会重复执行,知道起控制作用的布尔表达式得到“假”的结果为止。

3,while语句

while循环语句格式如下:

whileBoolean-expression)
   statement
  • 当循环开始的时候,会先计算一下布尔表达式的值;而在语句的下一次迭代开始前会再计算一次。也就是说while语句在进入循环体之前要先判断条件是否成立,如果成立的话则进入循环体。

例如:

public static void main(String[] args) {
        int i=2;
        while(i<3){
            i+=1;
        }
        System.out.println(i);
    }
  • 显然的是输出结果为3

4,do-while

do-while格式如下:

do
  statement
while(Boolean-expression);
  • do-while的语句至少会执行一次,即便表达式的值为false。也就是说对于do…while语句,不管条件是否成立都要先执行一遍。

简单示例如下:

public static void main(String[] args) {
        int i=2;
        do{
            i+=1;
        }
        while(i<3);
        System.out.println(i);
    }
  • 运行结果为3

while循环是先判断后循环 。
do–while循环是先循环后判断。
在实际应用中,while比do-while更常用。


5,for

for循环可能是最经常用的迭代形式,这种在第一次迭代之前要进行初始化。随后进行条件测试,而在每一次迭代结束时,进行某种形式的“步进”。for循环格式如下:

for(initialization;Boolean-expression;step)
  statement
  • 初始化表达式、布尔表达式或者步进都可以为空。每次迭代前会测试布尔表达式。若为false,就会执行for语句后面的代码,每次执行结束,会执行一次步进。
  • 在初始化不分实际上可以拥有任意数量的具有相同类型的变量定义。在一个控制表达式中,定义多个变量的这种能力值限于for循环适用。

下面是简单示例:

public static void main(String[] args) {
        int i;
        for(i=0;i<=100;i++){
            System.out.println(i+" ");
        }
    }
  • 打印结果为:0~100 这101个数字。

6,Foreach

foreach是一种更加简洁的for语法用于数组和容器,表示不必创建int变量去对由访问项构成的序列进行计数,foreach将自动产生每一项。
foreach基本语法:

for(float x:f){
}

下面是foreach案例:

public static void main(String[] args){
        int[] a = new int[10];
        for(int i=0;i<10;i++){
            a[i] = i;
        }
        for(int i:a){
            System.out.print(i+" ");
        }
    }
  • 输出结果为:0 1 2 3 4 5 6 7 8 9

foreach也适用于任何Iterable对象。在录入代码的时候可以节省时间,阅读的时候也比较容易。


7,return

return关键字有两方面的用途:一方面制定一个方法的返回值(假设它没有void返回值),另一方面它会导致当前的方法退出,并返回那个值。
示例如下:

public class test {
    static int result = 0;
    static void test(int number1, int number2){
        if(number1 > number2)
            result +1;
        else if(number1 < number2)
            result -1;
        else
            result 0;
    }
    public static void main(String[] args) {
        test(10, 5);
        test(5, 10);
        test(5, 5);
    }
}
  • 输出内容为:
    1
    -1
    0

如果在void的方法中没有return语句,那么在该方法的结尾会有一个隐式的return,因此在方法中并非总是要有一个return语句。但是,如果一个方法声明它将返回void之外的其它东西,就必须确保每一条代码都将返回一个值。


8,break和continue

在任何的迭代语句主体部分,都可以用breakcontinue控制循环流程。其中break用于强行退出循环,不执行循环中剩余的语句。而continue则停止执行当前的迭代,然后退出循环起始处,开始下一次迭代。
示例:

public class test1 {
    public static void main(String[] args){
        for(int i=0;i<100;i++){
            if(i==66)
                break;
            if(i % 9 != 0)
                continue;
            System.out.print(i+" ");
        }
    }
  • 输出结果为:0 9 18 27 36 45 54 63
  • 分析:在整个for循环中,i 的值永远不会达到100;因为 i 一旦达到66break语句就会中断循环。通常,只有在不知道中断条件何时满足时,才需要这样使用break。只要 i 不能被9整除,continue语句就会使执行过程返回到循环的最开头(这就会使 i 值递增)。如果能够整除,则将值显示出来。

return,break、continue表示这个分支无需任何测试就可以发生。


9,goto语句

goto起源于汇编语言的程序控制,若条件A成立,则跳到这里;否则跳到那里。这里不做过多阐述。


10,switch

switch有时也被划归为一种选择语句。根据整数表达式的值,switch语句可以从一系列代码中选择一段去执行。
格式如下:

switch(integral-selector) {
  case integral-value1 : statement;break;
  case integral-value2 : statement;break;
  case integral-value3 : statement;break;
  case integral-value4 : statement;break;
  case integral-value5 : statement;break;
  ...
  default: statement;
}
  • integral-selector(整数选择因子)是一个能够产生整数值的表达式,switch能将这个表达式的结果与每个integral-value(整数值)进行比较。若相符,执行对应语句(单一语句或者多条语句,不需要括号)。若没有相符的,执行default(默认)语句。
  • 上面每个casebreak结尾,这样可以使执行流程跳转至switch主题的末尾。这是构建switch语句的一种传统方式,但是break是可选的。若省略break,会继续执行后面的case语句,直到一个break为止。最后的default没有break语句,因为执行流程默认已经到了break的跳转目的地。
  • switch语句实现多路选择,但它要求选择因子必须是intchar这样类型的整数值。对于非整数类型,则必须使用一系列的if语句。
  • switch运用:
public class test1 {
    public static void main(String[] args){
        int x = 1, y = 2;
        char ch = '+';
        switch (ch) {
            case '+':
                System.out.println("x+y=" + (x + y));
                break;
            case '-':
                System.out.println("x-y="+(x-y));
                break;
            case '*':
                System.out.println("x*y="+(x*y));
                break;
            case '/':
                System.out.println("x/y="+(x/y));
                break;
            default:
                System.out.println();    
        }
    }
  • 运行结果为:x+y=3

case语句可以堆叠在一起,为一段代码形成多重匹配,也就是只要符合多种条件的一种,就执行那段特别的代码。这时要将break语句置于特定case的末尾,否则控制流程会简单下移,处理下面的case

展开阅读全文

没有更多推荐了,返回首页