1.4 Java三大流程控制之选择结构



本章及以后讲解流程控制的内容。

逐步进入代码的编写,以解决一些实际问题。

一、概述

流程控制语句分三类:顺序、选择、循环。

1.顺序的流程控制语句:

从上到下依次执行

2.选择的流程控制语句:

主要是if-else结构和switch结构两类。其中,if-else结构可以演变出多重if结构、嵌套if结构。

  • if 结构、if-else结构
  • 多重if结构
  • 嵌套if结构
  • switch结构

3.循环的流程控制语句:

  • while, do-while, for
  • 循环嵌套

二、多重if else结构

2.1 之前的简单结构

  • if 结构:

  • if-else结构

2.2 多重if else结构

有点像Python中的elif~

2.3 案例应用

需求描述:

编写一个程序,根据考试成绩,输出相应的评定信息:

  • 成绩大于等于90分,输出“优”;
  • 成绩大于等于80,且小于90分,输出“良”;
  • 成绩大于等于60分,且小于80分,输出“中”;
  • 成绩小于60分,输出“不及格”。

1.使用之前的if else结构

package com.imooc.flow;
import java.util.Scanner;

public class ScoreAssess {
    public static void main(String[] args) {
        // 多行注释
        /*                                                
        - 成绩大于等于90分,输出“优”;
        - 成绩大于等于80,且小于90分,输出“良”;
        - 成绩大于等于60分,且小于80分,输出“中”;
        - 成绩小于60分,输出“不及格”。
        */
        
        System.out.println("请输入成绩:");
        Scanner sc=new Scanner(System.in);
        int score=sc.nextInt();
        
        if(score>=90)                            // 这里结尾没有分号!因为分号表示一段语句的结束~
            System.out.println("优");
        if(score>=80 & score<90)
            System.out.println("良");
        if(score>=60 & score<80)
            System.out.println("中");
        if(score<60)
            System.out.println("不及格");            
    }
}


--->
请输入成绩:
90
优

2.使用多重if else结构:

package com.imooc.flow;
import java.util.Scanner;

public class ScoreAssess {
    public static void main(String[] args) {
        // 多行注释
        /*                                                
        - 成绩大于等于90分,输出“优”;
        - 成绩大于等于80,且小于90分,输出“良”;
        - 成绩大于等于60分,且小于80分,输出“中”;
        - 成绩小于60分,输出“不及格”。
        */
        System.out.println("请输入成绩:");
        Scanner sc=new Scanner(System.in);
        int score=sc.nextInt();
        
        if(score>=90)
            System.out.println("优");
        else if(score>=80)                        // 相当于score>=80 & score<90,隐含条件
            System.out.println("良");
        else if(score>=60)                        // 相当于score>=60 & score<80
            System.out.println("中");
        else                                     // 相当于score<60
            System.out.println("不及格");            
    }
}

--->
请输入成绩:
55
不及格

三、嵌套if else结构

将整个if块,插入到另一个if块中

3.1 语法格式

3.2 案例应用

从键盘输入两个整数,经过判断,输出他们的关系(大于、小于、等于)?

  • 使用嵌套if else结构
package com.imooc.flow;
public class IntCompare {

    public static void main(String[] args) {
        // 定义两个整型变量,并初始化
        int x=5,y=10;
        // 判断x和y是否相等
        if(x!=y) {
            if(x>y) {                                // 嵌套了一个if else结构
                System.out.println(x+"大于"+y);
            }
            else {
                System.out.println(x+"小于"+y);
            }
        }
        else                                        // 隐含条件:x=y
        {
            System.out.println(x+"和"+y+"相等");
        }
    }
}

--->
5小于10

注意:先将代码量多的,写在前面

  • 嵌套if else结构如果不加大括号,会怎么样?
package com.imooc.flow;

public class IntCompare {

    public static void main(String[] args) {
        // 定义两个整型变量,并初始化
        int x=5,y=10;
        // 判断x和y是否相等        
        if(x!=y) 
            if(x>y) 
                System.out.println(x+"大于"+y);
            else 
                System.out.println(x+"小于"+y);
        else
            System.out.println(x+"和"+y+"相等");    
    }
}

--->
5小于10                     // 结果相同
上面有点Python的页面赶脚,主要通过缩进体现格式,龟叔创建时就是这么想的么 :)

3.3 可相互比较的数据类型

package com.imooc.operator;
public class Test2 {

    public static void main(String[] args) {
        // 定义变量
        int n=5;
        long l=10l;
        float f=5;
        double d=5;
        char ch='a';
        String s="a";
        
        System.out.println(n>l);                // 整数型之间,可以相互比较
        System.out.println(f==d);                // 浮点型之间,可以相互比较
        System.out.println(n==d);                // 整数型与浮点型之间,可以相互比较
        System.out.println(l<f);                
        
        System.out.println(n<ch);                // 整数型与字符型之间,可以相互比较:比的是字符型的编码值
        
        System.out.println(s==n);                // 字符串与整数型之间,不可相互比较
        System.out.println(s==f);                // 字符串与浮点型之间,不可相互比较
        System.out.println(s==ch);                // 字符串与字符型之间,不可相互比较
    }
}

除此之外,布尔值不可与任何的数据类型进行比较。

四、switch结构

选择结构的两大结构之一。

4.1 if else结构与switch结构的区别

比较if else结构switch结构
判断条件布尔类型
是一个范围
是常量值

4.2 语法格式

注意:

  • break:用于执行结束,跳出switch结构。可以让switch结构的使用更加灵活。
  • default语句:有点像前面if else嵌套结构中最后的else语句,兜底的

JDK7.0之后,表达式的值可以是基本数据类型中的byte、short、int、char,以及String类型。

4.3 案例应用

从键盘输入1-7之间的任意数字,分别输出对应的信息?

  • 1----星期一
  • 2----星期二
  • 3----星期三
  • 4----星期四
  • 5----星期五
  • 6----星期六
  • 7----星期日

1.case为整型时,进行匹配

package com.imooc.flow;
import java.util.Scanner;

public class WeekDemo1 {
  public static void main(String[] args) {
      // 提示信息,键盘输入数据
      System.out.println("请输入1-7之间的数字:");
      Scanner sc = new Scanner(System.in);
      int n = sc.nextInt();

      switch (n) {                            // Eclipse中,格式化代码自动缩进:右键|Sourse|Format。
      case 1:
          System.out.println("星期一");
      case 2:
          System.out.println("星期二");
      case 3:
          System.out.println("星期三");
      case 4:
          System.out.println("星期四");
      case 5:
          System.out.println("星期五");
      case 6:
          System.out.println("星期六");
      case 7:
          System.out.println("星期日");
      default:
          System.out.println("该数字超出了1-7的范围!");
      }
  }
}

--->
请输入1-7之间的数字:
3                                                // 因为缺少了break的语句,所以case3及其以后都会执行
星期三
星期四
星期五
星期六
星期日
该数字超出了1-7的范围!

改正:

package com.imooc.flow;
import java.util.Scanner;

public class WeekDemo1 {
  public static void main(String[] args) {
      // 提示信息,键盘输入数据
      System.out.println("请输入1-7之间的数字:");
      Scanner sc = new Scanner(System.in);
      int n = sc.nextInt();                                // 这里必须输入整型噢

      switch (n) {
      case 1:
          System.out.println("星期一");break;               // 增加break关键字
      case 2:
          System.out.println("星期二");break;
      case 3:
          System.out.println("星期三");break;
      case 4:
          System.out.println("星期四");break;
      case 5:
          System.out.println("星期五");break;
      case 6:
          System.out.println("星期六");break;
      case 7:
          System.out.println("星期日");break;
      default:
          System.out.println("该数字超出了1-7的范围!");
      }
  }
}

--->
请输入1-7之间的数字:
3
星期三
  
请输入1-7之间的数字:
8
该数字超出了1-7的范围!

请输入1-7之间的数字:
a
Exception in thread "main" java.util.InputMismatchException            // 因为输入的不是整型,所以报出异常,后续讲

2.case为字符串类型时,进行匹配

上述是通过整型进行匹配,下面用字符串类型进行匹配:

package com.imooc.flow;
import java.util.Scanner;

public class WeekDemo2 {
  public static void main(String[] args) {
      // 提示信息,键盘输入数据
      System.out.println("请输入表示星期的英文单词:");
      Scanner sc = new Scanner(System.in);
      String week = sc.next();                         // 这里已是next(),不再是之前的nextInt()

      switch (week) {
      case "MONDAY":
          System.out.println("星期一");break;
      case "TUESDAY":
          System.out.println("星期二");break;
      case "WEDNESDAY":
          System.out.println("星期三");break;
      case "THURSDAY":
          System.out.println("星期四");break;
      case "FRIDAY":
          System.out.println("星期五");break;
      case "SATURDAY":
          System.out.println("星期六");break;
      case "SUNDAY":
          System.out.println("星期日");break;
      default:
          System.out.println("单词输入错误!");
      }
  }
}

--->
请输入表示星期的英文单词:
TUESDAY
星期二

请输入表示星期的英文单词:
tuesday
单词输入错误!                    // 不合理啊,能不能不区分大小写?

改为:

package com.imooc.flow;
import java.util.Scanner;

public class WeekDemo2 {
  public static void main(String[] args) {
      // 提示信息,键盘输入数据
      System.out.println("请输入表示星期的英文单词:");
      Scanner sc = new Scanner(System.in);
      String week = sc.next();
      
      week=week.toUpperCase();                // 将用户输入的字符串中的字符,全部改为大写

      switch (week) {
      case "MONDAY":
          System.out.println("星期一");break;
      case "TUESDAY":
          System.out.println("星期二");break;
      case "WEDNESDAY":
          System.out.println("星期三");break;
      case "THURSDAY":
          System.out.println("星期四");break;
      case "FRIDAY":
          System.out.println("星期五");break;
      case "SATURDAY":
          System.out.println("星期六");break;
      case "SUNDAY":
          System.out.println("星期日");break;
      default:
          System.out.println("单词输入错误!");
      }
  }
}

--->
请输入表示星期的英文单词:
Tuesday
星期二

声明:Jerry's Blog|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 1.4 Java三大流程控制之选择结构


Follow excellence, and success will chase you.