[再学编程思想]第四章 控制执行流程

和c/c++一样,java也有相似的流程控制语句,如if-else,while,do-while,for,return,break等

一.true和false

    所有条件语句都利用条件表达式的真或者假来决定执行路径,这里有一个条件表达式的例子,a==b 如果该表达式的值是真的返回true反之返回false,和c不同的是java不允许使用数字作为布尔值使用,如果想在布尔测试中使用一个非布尔值,则必须将其转化为布尔值,例如:if(a!=0)

二. if-else

    if-else语句是控制程序流程的最基本形式,其中的else是可选的,即有一下两种形式

if(Boolean-expression)
    statement


if(Boolean-expression)
    statement
else
    statement

    布尔表达式必须产生一个布尔结果,statement指用分号结尾的简单语句,或封闭在花括号内的一组简单语句。

三.迭代

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

    while循环的格式如下:

while(Boolean-expression)
    statement

    循环刚开始时,会计算一次布尔表达式的值,而在下一次迭代开始之前会再计算一次。

public class WhileTest {
  static boolean condition() {
    boolean result = Math.random() < 0.99;
    System.out.print(result + ", ");
    return result;
  }
  public static void main(String[] args) {
    while(condition())
      System.out.println("Inside 'while'");
    System.out.println("Exited 'while'");
  }
} /* (Execute to see output) *///:~

    这个例子中,condition()方法用到了Math库中的static犯法random()该方法的作用是产生0和1之间的一个double值,result的值是通过比较操作符<而得到它。

    do-while:

do
    statement
while(Boolean-expression)

    do-while和while唯一的区别就是do-while中的语句至少会执行一次,即便表达式第一次就被计算为false。

    for:

    

for(initialization;Boolean-expression:step)
    statement

    初始化表达式,布尔表达式,步进都可以为空,每次迭代前会测试布尔表达式的值,如果结果是false就会执行for语句后面的代码行,每次循环结束会执行一次步进。

    for循环经常用作计数任务

public class ListCharacters {
  public static void main(String[] args) {
    for(char c = 0; c < 128; c++)
      if(Character.isLowerCase(c))
        System.out.println("value: " + (int)c +
          " character: " + c);
  }
} /* Output:
value: 97 character: a
value: 98 character: b
value: 99 character: c
value: 100 character: d
value: 101 character: e
value: 102 character: f
value: 103 character: g
value: 104 character: h
value: 105 character: i
value: 106 character: j
...
*///:~

    变量c实在程序用到的地方被定义的,也就是for循环的控制表达式中,而不是main()开始的地方定义的,c的作用域在for控制的表达式范围内。

    逗号操作符:

    java中唯一用到逗号操作符的地方是for循环的控制表达式,在控制表达式的初始化部分和步进控制部分,可以使用一系列的逗号分隔的语句,而且那些语句会独立执行。

    

public class CommaOperator {
  public static void main(String[] args) {
    for(int i = 1, j = i + 10; i < 5; i++, j = i * 2) {
      System.out.println("i = " + i + " j = " + j);
    }
  }
} /* Output:
i = 1 j = 11
i = 2 j = 4
i = 3 j = 6
i = 4 j = 8
*///:~

四.Foreach语法

    java se5 引入了一种新的更加简洁的for语法用于数组和容器,即foreach语法,也就是平时说的增强for循环,表示不必创建int变量去对由访问项构成的序列进行计数,foreach将自动产生每一项。

    例子:

public class ForEachFloat {
  public static void main(String[] args) {
    Random rand = new Random(47);
    float f[] = new float[10];
    for(int i = 0; i < 10; i++)
      f[i] = rand.nextFloat();
    for(float x : f)
      System.out.println(x);
  }
} 

    foreach语法可以用于任何的Iterable对象。

五.return

    return关键词有两方面的用途:一方面是指定一个方法返回什么值,另一方面它会导致当前的方法退出,并返回那个值,如果void方法中没有return语句,那么在该方法结尾处会有一个隐式的return,因此在方法中并非总是需要一个return语句,但是如果一个方法声明它将返回void之外的其他东西,则必须要保证每一条代码路径都将返回一个值。

import static net.mindview.util.Print.*;

public class IfElse2 {
  static int test(int testval, int target) {
    if(testval > target)
      return +1;
    else if(testval < target)
      return -1;
    else
      return 0; // Match
  }
  public static void main(String[] args) {
    print(test(10, 5));
    print(test(5, 10));
    print(test(5, 5));
  }
} /* Output:
1
-1
0
*///:~

六.break和continue

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

    例子:

public class BreakAndContinue {
  public static void main(String[] args) {
    for(int i = 0; i < 100; i++) {
      if(i == 74) break; // Out of for loop
      if(i % 9 != 0) continue; // Next iteration
      System.out.print(i + " ");
    }
    System.out.println();
    // Using foreach:
    for(int i : range(100)) {
      if(i == 74) break; // Out of for loop
      if(i % 9 != 0) continue; // Next iteration
      System.out.print(i + " ");
    }
    System.out.println();
    int i = 0;
    // An "infinite loop":
    while(true) {
      i++;
      int j = i * 27;
      if(j == 1269) break; // Out of loop
      if(i % 10 != 0) continue; // Top of loop
      System.out.print(i + " ");
    }
  }
} /* Output:
0 9 18 27 36 45 54 63 72
0 9 18 27 36 45 54 63 72
10 20 30 40
*///:~

七.Switch

    switch有时候被划分为一种选择语句,根据整数表达式的值,switch语句可以从一系列代码中选出一段去执行

    格式如下:

switch(integral-selector){
    case integral-value1 : statment; break;
    case integral-value2 : statment; break;
    case integral-value3 : statment; break;
    case integral-value4 : statment; break;
    case integral-value5 : statment; break;
    default: statement;
}

    其中,Integral-selector(整数选择因子)是一个能够产生整数值的表达式,switch能将这个表达式的结果与每个integral-value比较,若发现相符的,就执行对应的语句,若没有相符的就执行default语句

    在上面的定义中,大家会注意到每个case均以一个break结尾,这样可使执行流程跳转至switch主体的末尾,这是构建seitch语句的一种传统方式,但break是可选的,如果省略break会继续执行后面的case语句,直到遇到一个break为止。

    switch语句是实现多路选择的一种干净利落的方法,但是他要求使用一个选择因子,并且必须是int或者char那样的整数值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值