Java 语言-3 Java 流程控制

3.1 程序输入输出

  • 应用程序(Java Application)的输入输出可以是文本界面,也可以是图形界面

  • 小应用程序(Java Applet)则只能是图形化界面

  • 文本界面:

    • 使用 Sarnner 类,jdk5 以后的方法
    • 使用 in 及 out (不展开)

3.1.1 Sarnner

  • 在 Java 基本语法中没有实现程序和人的交互,Java 中给我们提供了一个 Sarnner 工具类,来获取用户的输入

  • java.util.Scanner 是 Java5 的新特征

  • Sarnner 包含的基本方法有: next()、nextLine()

    • next() 与 nextLine() 的区别
      • next()
        • 一定要读取到有效字符后才结束输入
        • 对于输入有效字符之前遇到的空白,next() 方法会自动将其去掉
        • 只有输入有效字符后才将其后面输入的空白作为分隔符或结束符
        • next() 不能得到含有空格的字符串
      • nextLine() 用得多
        • 以 Enter 作为结束符,返回的是Enter以前的所有字符
        • 可以获得空白
  • 实例 Sarnner 对象语法:

    • Scanner s = new Sannner(System.in);
      
  • 通过 Scanner 类的 next() 等方法获取输入的字符串,在读取前一般需要使用 hasNext() 或 hasNextLine() 判断是否还有输入的数据

    • 例如:

      public static void main(String[] args) {
          //创建一个扫描器对象,用于接受键盘数据
          Scanner scanner = new Scanner(System.in);
          System.out.println("以 next 方式接收:");
          //判断用户有没有继续输入字符串
      	if (scanner.hasNext()){
      	//使用 next 形式接收
              String str =scanner.next();
              System.out.println("输入的内容为"+str);
          }
          //凡是属于IO流的类如果不关闭就会一种占有资源,要养成良好习惯用完就关掉
          scanner.close();
      }
      

3.1.2 Sarnner 进阶运用

  • Sarnner 还有其他方法,比如:nextInt()、nextDouble()

    Scanner scanner = new Scanner(System.in);
    int i = 0;
    float f =0F;
    System.out.println("请输入整数:");
    if (scanner.hasNextInt()){
        i = scanner.nextInt();
        System.out.println("整数数据:" + i);
    }else {
        System.out.println("输入的不是整数");
    }
    System.out.println("请输入小数:");
    if (scanner.hasNextFloat()){
        f =scanner.nextFloat();
        System.out.println("输入小数为:"+f);
    }else {
        System.out.println("输入的不是小数");
    }
    scanner.close();
    
    • 不仅数字还有其他类型
  • 示例:输入 n 个数,求 n 个数的总和以及其平均值

    • Scanner scanner = new Scanner(System.in);
      double sum = 0;
      int i =0;
      while (scanner.hasNextDouble()){
          double x = scanner.nextDouble();
          i++;
          sum= sum + x;
          System.out.println("你输入了"+i+"个数,当前和为"+sum);
      }
      System.out.println(i+"个数和为"+sum);
      System.out.println(i+"个数平均数为"+(sum/i));
      scanner.close();
      

3.2 顺序结构

  • Java 的基本结构就是顺序结构,除非特别指明,否则就按照顺序一步步执行。
  • 顺序结构是最简单的结构
    • 图示:
      image-20210831140109119
  • 语句与语句之间框与框之间是按照从上往下的顺序进行的,是由多个若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构
  • 最简单的语句
    • 方法调用语句
    • 赋值语句

3.3 选择结构

  • if 单选择结构

    • 在很多时候需要判断一个东西是否可行,然后去执行,这样的过程在程序中用 if 语句来表示

    • 语法格式:

      if(布尔表达式){
      	语句块;
      }
      

      如果布尔表达式为 true 将执行的语句

    • 例如:

      • Scanner scanner = new Scanner(System.in);
        System.out.println("请输入内容:");
        String i = scanner.nextLine();
        if (i.equals("Hello")){
           System.out.println("输入的是Hello");
        }
        System.out.println("输入的为其他");
        scanner.close();
        
  • if 双选择结构

    • 图示:
      image-20210831141411203

    • 语法格式:

      if(布尔表达式){
      	语句块1;
      }else{
      	语句块2;
      }
      
  • if 多选择结构

    • 图示:
      image-20210831141723218

    • 语法格式:

      if(布尔表达式){
      	语句块1;
      }elif{
      	语句块2;
      }else{
      	语句块3;
      }
      
  • 嵌套 if 语句

    • 在一个if语句或者elif语句中使用if或者elif语句

    • 语法格式:

      if(布尔表达式){
      语句块1;
        if(布尔表达式){
        语句块2;
        }
      }
      
  • switch 多选择结构

    • switch 语句判断一个变量的一系列值中某个值是否相等,每个值称为分支

    • 语法格式:

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

      switch:匹配一个值

      可以有任意的 case 语句

      default:可选

      如果有 break 会发生 case 穿透现象

    • switch 语句中的变量类型可以是:整数、字符、字符串

      • 从 JavaSE7 开始支持 string 类型

      • 同时 case 标签必须为字符串常量或者字面量

        • jdk7 新特性,字符本质还是数字,可以通过反编译 Java 查看

3.4 循环结构

  • 循环五要素

    • 初始化部分、循环条件、循环体部分、迭代部分、结束后处理
  • while 循环

    • while 是最基本的循环结构,其语法格式为:

      while(布尔表达式){
      	循环体;
      }
      

      只要布尔结果为 true,循环就会一直跑下去

      • 大多数情况下我们会让循环停下来,通过让表达式失效的方式来结束循环
      • 少部分情况需要循环一直跑下去,比如服务器监听
      • 循环条件一直为 true 就会造成无限循环【死循环】,正常业务编程中应该尽量避免死循环
        • 会影响程序性能或者照成程序卡死
    • 例如:计算 1+2+……+100=?

      int i = 0;
      int sum =0;
      while (i < 100){
          i++;
          sum = sum+i;
      }
       System.out.println("1+2+……+100="+sum);
      
  • do…while 循环

    • 对于 while 循环而言,不满足条件是不能进入循环。但是有时候我们需要即使不满足条件也要执行一次。就需要便用到 do…while

    • do…while 与 while 类似,不同的是,do…while 至少会执行一次

    • 语法格式:

      do{
      	循环体;
      }while(布尔表达式);
      
    • while 和 do…while 的区别

      • while 先判断条件再循环,do…while 先循环一次再判断条件
  • for 循环

    • for 循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构

    • for 循环执行的次数是在执行前就确定的,语法格式:

      for(初始化,布尔表达式,迭代){
      	循环体;
      }
      
    • 快捷键调出(idea):fori5.for

    • 有关 for 循环的几点说明

      1. 最先执行初始化步骤。可以声明一种类型。可初始化一个或多个循环控制变量,也可以是空语句

      2. 再检查布尔值表达式的值,如果为 True,进入循环体;如果为 False,终止循环,开始执行循环后的语句

      3. 执行完一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)

      4. 再次检测布尔值表达式……

  • 增强 for 循环 。暂时先了解

    • 在 Jdk5 引进了增强型 for 循环

    • 主要用于数组和集合,这种语句是只读式的遍历

    • 语法格式:

      for(声明语句:表达式){
      	……
      }
      

      声明语句:声明新的局部变量,该变量的类型与对应的数组类型匹配。其作用域限定在循环语句块,其数值等于此时数组元素的值

      表达式:要访问的数组名,或者是返回值为数组的方法

      • 例如:

        int[] numbers={12,12,12,12};		//定义数组
        for (int x:numbers) {				//遍历数组的元素
            System.out.print(x+"\t");
        }
        

3.5 特殊控制语句

  • goto 保留字

    • goto 是 java 的关键字,但是在 java 中未使用所以称为保留字

    • goto的影子在于:带标签的 break 和 continue 语句

      • 标签是指后面跟一个冒号的标识符。如:label:
    • 对于 java 来说唯一用到标签的地方是在循环语句之前

      • 理由:如果希望在循环中嵌套另一个循环,由于 break 和 continue 关键字通常只中断当前循环,但若随标签一同使用,就会中断到存在标签的地方
    • 例如:输出 101~500 的质数

      • int count = 0;
        outher:for (int i = 101; i < 150; i++) {
            for (int j =2; j<i/2;j++){
                if (i % j==0){
                continue outher;
            }
        }
            System.out.print(i+"\t");
        
  • break

    • 可在任何循环语句的主要部分使用,break 用于强制退出循环,不执行循环体剩余的语句

    • 其中,可用在循环使用标号来表名是哪重循环

      ……
      labe11:{ ……
      	labe12:{ ……
              labe13:{ ……
                  break labe12;
              }
          }
      }
      
    • switch 语句中也使用 break

  • continue

    • 在循环体语句中用于终止某次循环,即跳过未执行的语句,接着进行下一次是否执行循环的判定
    • 也可以通过标签指定调到那一层循环
posted @ 2022-02-17 19:45  你是我的生命之源  阅读(60)  评论(0)    收藏  举报
页脚