JavaSE之流程控制

作者: Ping开源 | 来源:发表于2020-11-21 03:35 被阅读0次

    四、流程控制

    目录:用户交互Scanner、顺序结构、选择结构、循环结构、break&continue、练习

    1.用户交互Scanner

    之前的基本语法中并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,可以用来获取用户的输入。java.util.Scanner是JDK5的新特性,可以通过Scanner类来获取用户输入。

    Scanner s = new Scanner(System.in);
    

    通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前一般需要使用hasNext()与hasNext
    Line()判断事否还有输入的数。

    import java.util.Scanner;
    public class Demo {
      public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用next方式接收:");
        if(scanner.hasNext()) {
          String str = scanner.next();
          System.out.println("输出的内容为:"+str);
        }
        scanner.close;//凡是属于IO流的类如果不关闭就会一直占用资源,最好关闭
      }
    }
    

    next():Ⅰ一定要读取到有效字符后才可以结束输入。
    Ⅱ对输入有效字符之前遇到的空白,next()方法会自动将其去掉。
    Ⅲ只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
    Ⅳnext()不能得到带有空格的结束符。
    nextLine():Ⅰ以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。
    Ⅱ可以获得空白。

    2.Scanner进阶使用

    例:输入int型的数

    Scanner scanner = new Scanner(System.in);
    int i = scanner.nextInt();
    //判断是否还有输入的整数
    scanner.hasNext();
    

    3.顺序结构

    Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行。
    顺序结构是最简单的算法结构。
    语句与语句之间按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构。

    4.if选择结构

    1)if单选择结构
    很多时候需要去判断一个东西是否可行,然后才行执行,这样的过程在程序中用if语句表时。

    if(布尔表达式) {
      //如果布尔表达式为true将执行的语句
    }
    

    equals:判断字符串是否相等
    2)if双选择结构

    if(布尔表达式) {
      //如果布尔表达式为true将执行的语句
    }else {
      //如果布尔表达式为false将执行的语句
    }
    

    3)if多选择结构

    if(布尔表达式1) {
      //如果布尔表达式1为true将执行的语句
    }else if(布尔表达式2) {
      //如果布尔表达式2为true将执行的语句
    }else {
      //如果以上布尔表达式都不为true将执行的语句
    }
    

    4)嵌套的if语法
    使用嵌套的if···else语句是合法的,也就是说可以在另一个if里或者else if语句中使用if或者else if语句,可以像if语句一样嵌套else if···else。

    if(布尔表达式1) {
       //如果布尔表达式1的值为true执行的语句
       if(布尔表达式2) {
        //如果布尔表达式2的值为true执行的语句
      }
    }
    

    5.Switch多选择结构

    多选择结构还有一个实现方式就是switch case语句。
    switch case语句判断一个变量与一系列值中的某个值是否相等,每个值称为一个分支。
    switch case语句中的变量类型可以是:byte、short、int或者char。从JDK7开始switch支持字符串类型了。同时case标签必须为字符串常量或字面量。

    switch(expression) {
      case value://语句
        break;
      case value://语句
        break;
      default://语句
    }
    

    case是穿透的,没有break;,将从匹配的case开始依次往下执行语句。


    反编译

    Project Structure——>查询编译后输出的路径——>把class文件拉进对应的java文件中


    项目编译后输出的路径

    6.While循环详解

    while是最基本的循环

    while(布尔表达式) {
      //循环内容
    }
    

    只要布尔表达式的值为true,循环就会一直执行下去。
    大多数情况是会让循环停止下来的,需要一个让表达式失效的方式来结束循环。
    少部分情况需要循环一直执行,比如说服务器的相应监听等。
    循环条件一直为true就会造成无限循环(死循环),正常情况下应该尽量避免死循环。会影响程序性能或者造成程序卡死崩溃!

    7.Dowhile循环

    对于while语句而言,如果不满足条件,则不能进入循环。但有时候即使不满足条件,也至少要执行一次。
    do···while循环和while循环相似,不同的是do···while循环至少会执行一次。

    do {
      //代码语句
    }while(布尔表达式);
    

    While和do-while的区别:Ⅰwhile先判断后执行,dowhile是先执行后判断
    ⅡDo···while总是保证循环体会被至少执行一次,这是主要差别!

    8.For循环详解

    虽然所有循环结构都可以用while或者do···while表示,但Java提供了另一种语句——for循环,使一些循环结构变得更加简单。
    for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。
    for循环执行的次数是在执行前就确定的。

    for(初始值;布尔表达式;更新) {
      //代码语句
    }
    

    关于for循环的几点说明:最先执行初始化步骤,可以声明一种类型但可以初始化一个或多个循环控制变量,也可以是空语句。然后,检测布尔表达式的值,如果为true,循环体被执行;如果为false,循环终止,开始执行循环体后面的语句。执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)。再次检测布尔表达式,循环执行上面的过程。
    print输出完不会换行,println输出完会换行
    输出完换行的两种方式:

    System.out.println();
    System.out.print("\n");
    

    9.打印九九乘法表

    步骤:Ⅰ先打印第一列
    Ⅱ把固定的Ⅰ再用一个循环包起来
    Ⅲ去掉重复项i<=j
    Ⅳ调整样式

    public class Demo {
      public static void main(String[] args) {
        for(int j=1;j<=9;j++) {
          for(int i=1;i<=j;i++) {
            System.out.print(j+"*"+i+"="+(j*i)+"\t");
          }
        System.out.println();
        }
      }
    }
    

    10.增强for循环

    例:定义一个数组number

    int[] number = {10,20,30,40,50};
    

    遍历number数组的元素

    for(int x:number) {
        System.out.println(x);
    }
    

    11.break、continue、goto

    1)break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行推出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)
    2)continue语句用在循环句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
    3)关于goto关键字:goto关键字很早就在程序设计语言中出现。尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用;Java没有goto。然而,在break和continue这两个关键字的身上,仍然看出一些goto的影子——带标签的break和continue。“标签”是指后面跟一个冒号标识符,例如:label:。对于Java来说唯一用来标签的地方是在循环语句之前,而在循环之前设置标签的唯一理由是:希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们就会中断到存在标签的地方。
    例:打印101-150之间的所有的质数

    public class Demo {
      public static void main(String[] args) {
        outer:for(int i=101;i<150;i++) {
          for(int j=2;j<i/2;j++) {
            if(i%j==0) {
              continue outer;
            }
          }
          System.out.print(i+" ");
        }
      }
    }  
    

    12.打印三角形及Debug

    例:打印一个5行的三角形

    public class Demo {
      public static void main(String[] args) {
        for(int i=1;i<=5;i++) {
          for(int j=5;j>=i;j--) {
            System.out.print(" ");//打印空白三角形1
          }
          for(int j=1;j<=i;j++) {
            System.out.print(" ");//打印三角形2
          }
          for(int j=1;j<i;j++) {
            System.out.print(" ");//打印三角形3
          }
        }
      }
    }
    

    思路:


    思路图

    相关文章

      网友评论

        本文标题:JavaSE之流程控制

        本文链接:https://www.haomeiwen.com/subject/jwaliktx.html