zoukankan      html  css  js  c++  java
  • TIJ读书笔记02-控制执行流程

     

    TIJ读书笔记02-控制执行流程

     

    所有条件语句都是以条件表达式的真假来决定执行路径,也就是通过布尔测试结果来决定程序的执行路径. 由于java中布尔类型的特殊实现,如果想在布尔测试中测试一个非布尔值,必须将其转换成布尔表达式.
    也就是说像C和C++中的while(1)这种方式是不可以的.

    if-else

    if-else有两种:

    if(boolean statment){
    statments;
    }

    if(boolean statment){
    statments;
    }else{
    statments;
    }

    那说else if呢,TIJ中解释,else if的实现就是else语句后紧跟了一个if语句. 不知道底层是不是这样的实现的,但是这样理解起来貌似更简单了呢.

    迭代

    迭代有三种,for,do-while,while. 迭代语句会重复执行,知道起控制作用的布尔表达式得到”false”的结果为止.
    do-while和while
    do-while和while的区别在于,do-while中的语句至少会执行1次.即使第一次表达式就被计算为false.

    do{
    statments;
    }while(boolean statment);


    while(boolean){
    statments;
    }

    for
    for循环,在第一次迭代之前会进行一个初始化,随后进行条件测试,且在每一次条件测试之后再进行一步某种形式的步进.

    for(initialization;Boolean-expression;step){
    statments;
    }

    逗号操作符.java中唯一用到逗号操作符的地方就是for循环的控制表达式.比如:

        @Test
    public void test1(){
    for(int i=0,j=i+10;i<5;i++,j=i*2){
    System.out.println("i="+i+" j="+j);
    }
    }

    froeach
    在java1.5之后,终于引入了foreach,foreach可以更方便的作用于数组和容器. forerach不需要创建int变量去对被访问对象构成的序列进行计数.foreach将自动的产生每一项.

        @Test
    public void test2(){
    int[] arrayInt={1,2,3,4,5};
    List<Integer> listInt = new ArrayList<>();
    listInt.add(1);
    listInt.add(2);
    listInt.add(3);
    listInt.add(4);
    listInt.add(5);

    for(int eachInt:arrayInt){
    System.out.print(eachInt+" ");
    }
    for(int eachItem:listInt){
    System.out.print(eachItem+" ");
    }
    }

    无条件分支

    java中有几个关键字表示unconditional branching,叫做无条件分支.比如return,break,contine
    return
    return作用有两个:

    • 退出一个方法
    • 退出时,返回某个值.

    返回值类型为void的方法,并没有返回值,但是方法末尾会有一个隐式的return;

    break和contine
    break和contine都是用来控制循环流程的. break用来退出当前循环,contine用来停止当前循环,然后回到循环的起点继续下次循环.

    关于标签和goto
    goto最早起源于汇编语言的程序控制,这在汇编中是很常见的. 而goto是源码级别的跳转,据说会导致程序的逻辑混乱. 从我上学那会儿goto就成了伊甸园禁果,各种教材资料上都说,这是个很危险的玩意儿,不要用. 错的不是goto而是goto语句的提供导致标签的滥用.

    java中限制标签只能用在continue和break之后,它实际不是一个跳转,而是中断迭代语句的一种方法.

    label1:
    outer-iteration{
    inner-iteration{
    //...
    break;//这里的break会退出内部迭代,返回到外部迭代中去
    //...
    continue;//这里会使执行点移到迭代的起始处
    //...
    continue label1;//同时中断内部和外部迭代,返回label1处,随后从外部迭代开始继续
    //...
    break label1;//中断所有迭代,返回label1处,之后不再进入.
    }
    }
        public static void main(String[] args) {
    int i =0;
    outer:
    for(;true;){
    inner:
    for(;i<10;i++){
    System.out.println("i="+i);
    if(i==2){
    System.out.println("continue");
    continue;
    }
    if(i==3){
    System.out.println("break");
    i++;
    break;
    }
    if(i==7){
    System.out.println("continue outer");
    i++;
    continue outer;
    }
    if(i==8){
    System.out.println("break outer");
    break outer;
    }
    for(int k =0;k<5;k++){
    if(k==3){
    System.out.println("continue inner");
    continue inner;
    }
    }
    }
    }
    }
    /*
    //out:
    i=0
    continue inner
    i=1
    continue inner
    i=2
    continue
    i=3
    break
    i=4
    continue inner
    i=5
    continue inner
    i=6
    continue inner
    i=7
    continue outer
    i=8
    break outer
    */

    @Test
    public void test1(){
    int i =0;
    outer:
    while(true){
    i++;
    if(i==5){
    System.out.println("continue outer");
    continue outer;
    }
    }
    }

    switch语句

    switch必须使用int或者char类型来做选择因子. 但是通过enum可以弱化这一限制.

        public static void main(String[] args) {
    Random rand = new Random(47);
    for(int i =0;i<100;i++){
    int c = rand.nextInt(26)+'a';
    System.out.print((char)c +" ,"+c+": ");
    switch(c){
    case 'a':
    case 'e':
    case 'i':
    case 'o':
    case 'u':
    System.out.println("vowel");
    break;
    case 'y':
    case 'w':
    System.out.println("sometimes a vowel");
    break;
    default: System.out.println("consonant");
    }
    }
    }

    一个小例子 不多说.

  • 相关阅读:
    LightningChartJS2.0即将火热推出,敬请期待!
    html转word
    Windows上使用Python2.7安装pip
    人工智能?.netcore一样胜任!
    远程浏览服务器上的文件
    C# winform间窗体传值简单Demo
    C#发送QQ邮箱
    各种文件用JS转Base64之后的data类型
    当你的VS2019没法自动补全了,或者自动补全按回车直接换行的时候
    easyUI filebox 获取文件对象
  • 原文地址:https://www.cnblogs.com/thecatcher/p/5835716.html
Copyright © 2011-2022 走看看