Java 顺序,选择结构

1 顺序结构

  • JAVA的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行。
  • 顺序结构是最简单的算法结构

语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构。

2 选择结构

2.1 分类

  • if单选择结构

  • if双选择结构

  • if多选择结构

  • 嵌套if结构

  • switch多选择结构

2.2 if单选择结构

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

2.2.1 语法

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

2.2.1 例子

import java.util.Scanner;

public class T {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);

        System.out.println("请输入内容:");
        String s=scanner.nextLine();

        //equals:判断字符串是否相同
        if (s.equals("Hello")){
            System.out.println(s);
        }
        System.out.println("End");
        scanner.close();
    }
}

2.3 if双选择结构

现在有个需求,公司要收购一个软件,成功了,给人支付100万元,失败了,自己找人开发。这样的需求用一个 if 就搞不定了,我们需要有两个判断,需要一个双选择结构,所以就有了if-else结构。

2.3.1 语法

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

2.3.2 例子

import java.util.Scanner;

public class T {
    public static void main(String[] args) {
        // 考试分数大于60 及格,小于60 不及格
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入成绩:");
        int score = scanner.nextInt();

        if (score > 60) {
            System.out.println("及格");
        } else {
            System.out.println("不及格");
        }
        
        scanner.close();
    }
}

2.4 if多选择结构

我们发现刚才的代码不符合实际情况,真实的情况还可能存在ABCD,存在区间多级判断。

如90-100就是A, 80-90就是B..等等,在生活中我们很多时候的选择也不仅仅只有两个,所以我 们需要一个多选择结构来处理这类问题!

2.4.1 语法

if(布尔表达式 1){
	//布尔表达式 1的值为true将执行的语句
}else if(布尔表达式 2){
    //布尔表达式 2的值为true将执行的语句
}else if(布尔表达式 3){
    //布尔表达式 3的值为true将执行的语句
}else{
    //以上布尔表达式均为flase将执行的语句
}

2.4.2 例子

package com.study;

import java.util.Scanner;

public class T {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入成绩:");
        int score = scanner.nextInt();

        if (score == 100) {
            System.out.println("恭喜满分");
        } else if (score < 100 && score >= 90) {
            System.out.println("A");
        } else if (score < 90 && score >= 80) {
            System.out.println("B");
        } else if (score < 80 && score >= 70) {
            System.out.println("C");
        } else if (score < 70 && score >= 60) {
            System.out.println("D");
        } else if (score < 60 && score >= 0) {
            System.out.println("不及格");
        } else {
            System.out.println("成绩不合法");
        }
        scanner.close();
    }
}

PS:

  1. if 语句中至多有 1 个 else 语句,else 语句放在所有的 else if 语句之后

  2. if 语句可以有若干个 else if 语句,他们必须放在 else 语句之前

  3. 一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行

2.5 嵌套的 if 结构

你可以在另一个 if 或者 else if 语句中使用 if 或者 else if 语句。你可以像 if 语句一样嵌套 else if..else。

2.5.1 语法

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

2.6 switch 多选择结构

  • 多选择结构另一个实现方式就是switch case语句。
  • switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。

2.6.1 语法

switch(expression){
    case value:
        //语句
        break;//可选
    case value:
        //语句
        break;//可选
    //可以有任意数量的case语句
    default://可选
        //语句
}

PS: switch 语句中的变量类型可以是:

  1. byte,short,int,char

  2. 从 Java SE 7开始,switch 支持字符串 String 类型,同时 case标签必须为字符串常量或者字面量。

  3. 对比与多IF判断这种方式更高效--直接匹配

2.6.2 实例1

package com.study;

public class T {
    public static void main(String[] args) {

        char grade = 'C';

        switch (grade) {
            case 'A':
                System.out.println("优秀");
                break;
            case 'B':
                System.out.println("良好");
                break;
            case 'C':
                System.out.println("及格");
                break;
            case 'D':
                System.out.println("继续努力");
                break;
            case 'E':
                System.out.println("GG");
                break;
            default:
                System.out.println("未知等级");
        }
    }
    
}

PS:注意case 穿透问题,switch 匹配一个具体的值

2.6.3 实例2

package com.study;

public class T {
    public static void main(String[] args) {
        //JDK7新特性,表达式结果可以是字符串!!!
        //字符的本质还是数字

        //反编译   java---class(字节码文件)----JVM----反编译(IDEA)
        String name = "秦";

        switch (name) {
            case "秦":
                System.out.println("秦");
                break;
            case "唐":
                System.out.println("唐");
                break;
            default:
                System.out.println("???");
        }
    }
}

反编译--代码(class):

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.study;

public class T {
    public T() {
    }

    public static void main(String[] args) {
        String name = "秦";
        byte var3 = -1;
        switch(name.hashCode()) {
        case 21776:
            if (name.equals("唐")) {
                var3 = 1;
            }
            break;
        case 31206:
            if (name.equals("秦")) {
                var3 = 0;
            }
        }

        switch(var3) {
        case 0:
            System.out.println("秦");
            break;
        case 1:
            System.out.println("唐");
            break;
        default:
            System.out.println("???");
        }

    }
}

PS:每一个对象都有自己的一个hashcode,

posted @ 2022-04-05 14:34  MR·Jerry  阅读(44)  评论(0)    收藏  举报