顺序、选择、循环

发布时间 2023-09-09 11:54:27作者: SimpleWord
title: 顺序、选择、循环
index_img:  https://tuchuangs.com/imgs/2023/07/22/860e4047323f0b1c.png
tags:
  - Java SE
categories:
  - Java SE
hide: false
excerpt: StringBuilder、常用方法、链式编程

顺序结构

程序按从上到下的顺序执行。

public class Main {
    public static void main(String[] args) {
        System.out.println("我在前面,我先执行!");
        System.out.println("我在中间,我稍后执行!");
        System.out.println("我在最后,我最后执行!");
    }
}

image-20230722231815198

选择结构

if语句

  • 使用boolean判断,直接作为表达式或者使用==
  • {}不要省略,因为有些语句不好判断是几条语句,如int a = 3是声明和赋值两条语句。

格式 1

格式

if (条件表达式) {
 // 满足条件表达式执行这里的语句
}

案例

public class Main {
    public static void main(String[] args) {
        int a = 10;
        int b = 1;
        if (a > b) {
            System.out.println(a + ">" + b); //10>1
        }
        if (a < b) {
            System.out.println(a + "<" + b); //不会执行
        }
        System.out.println("下一条语句"); // 下一条语句
    }
}

格式 2

规则

if (条件表达式) {
 // 满足条件表达式执行这里的语句
}
else{
  // 不满足条件表达式执行这里的语句
}

案例

public class Main {
    public static void main(String[] args) {
        int a = 10;
        int b = 1;
        if (a > b) {
            System.out.println(a + ">" + b); //10>1
        } else {
            System.out.println(a + "<" + b); // 不执行
        }
        System.out.println("下一条语句"); // 下一条语句
    }
}

格式 3

规则

if (条件表达式1) {
 // 满足条件表达式1执行这里的语句
}
else if(条件表达式2){
 // 满足条件表达式2执行这里的语句
}
else if(条件表达式3){
 // 满足条件表达式3执行这里的语句
}
......
else{
  // 不满足条件表达式执行这里的语句
}

案例

public class Main {
    public static void main(String[] args) {
        int price = 1000;
        Scanner sc = new Scanner(System.in);
        int len = sc.nextInt(); //输入5
        if (len == 9) {
            double value = price * len * 0.1 / 100;
            System.out.println("商品打" + len + "折," + "最终价格" + value);
        } else if (len == 5) {
            double value = price * len * 0.1 / 100;
            System.out.println("商品打" + len + "折," + "最终价格" + value); //商品打5折,最终价格5.0
        } else if (len == 1) {
            double value = price * len * 0.1 / 100;
            System.out.println("商品打" + len + "折," + "最终价格" + value);
        } else {
            System.out.println("原价" + price + "出售");
        }
    }
}

嵌套

public class Main {
    public static void main(String[] args) {
        int price = 1000;
        Scanner sc = new Scanner(System.in);
        int len = 5;
        if (0 < len & len < 10) {
            System.out.println("数据正常!");  // 数据正常
            if (len == 9) {
                double value = price * len * 0.1 / 100;
                System.out.println("商品打" + len + "折," + "最终价格" + value);
            } else if (len == 5) {
                double value = price * len * 0.1 / 100;
                System.out.println("商品打" + len + "折," + "最终价格" + value); //商品打5折,最终价格5.0
            } else if (len == 1) {
                double value = price * len * 0.1 / 100;
                System.out.println("商品打" + len + "折," + "最终价格" + value);
            } else {
                System.out.println("原价" + price + "出售");
            }
        } else {
            System.out.println("数据异常!");
        }
    }
}

switch语句

  • 表达式(即要匹配的值):支持byteshortcharint枚举(jdk5 之后)、String(jdk7 之后)
  • case 后的值(只能是字面量,不能是常量,不许重复)与表达式进行匹配
  • break标识中断,结束switch语句,没有break则会带来穿透效果(即使匹配了也继续执行,直到遇到 break 或者语句结束)
  • default,特殊的 case,相当于 else

格式 1

语法

switch(表达式){
    case 值1:
      //语句
      break;
    case 值2:
      //语句
      break;
    ...
     default:
    	//语句
      break;
}

案例

public class Main {
    public static void main(String[] args) {
        int day = 4;
        String dayString;
        switch (day) {
            case 1:
                dayString = "Monday";
                break;
            case 2:
                dayString = "Tuesday";
                break;
            case 3:
                dayString = "Wednesday";
                break;
            case 4:
                dayString = "Thursday"; // Thursday
                break;
            case 5:
                dayString = "Friday";
                break;
            case 6:
                dayString = "Saturday";
                break;
            case 7:
                dayString = "Sunday";
                break;
            default:
                dayString = "Invalid day";
                break;
        }
        System.out.println(dayString);
    }
}
public class Main {
    public static void main(String[] args) {
        int day = 4;
        String dayString;
        switch (day) {
            case 1:
                dayString = "Monday";
                break;
            case 2:
                dayString = "Tuesday";
                break;
            case 3:
                dayString = "Wednesday";
                break;
            case 4:
                dayString = "Thursday"; // dayString = "Thursday"
//                break;
            case 5:
                dayString = "Friday"; // 由于穿透, dayString = "Friday"
//                break;
            case 6:
                dayString = "Saturday"; // 继续穿透, dayString = "Saturday"
                break;
            case 7:
                dayString = "Sunday";
                break;
            default:
                dayString = "Invalid day";
                break;
        }
        System.out.println(dayString);
    }
}

格式 2

jdk12 以后支持,不需要break,避免了遗忘 break 带来的穿透问题。{}单条语句时可省略。

switch(表达式){
    case 值1->{
    	//语句
    }
    case 值2->{
    // 语句
    }
    ...
     default->{
     	//语句
     }
     break;
}
public class Main {
    public static void main(String[] args) {
        int day = 4;
        String dayString;
        switch (day) {
            case 1 -> dayString = "Monday";
            case 2 -> dayString = "Tuesday";
            case 3 -> dayString = "Wednesday";
            case 4 -> dayString = "Thursday"; //Thursday
            case 5 -> dayString = "Friday";
            case 6 -> dayString = "Saturday";
            case 7 -> dayString = "Sunday";
            default -> dayString = "Invalid day";
        }
        System.out.println(dayString);
    }
}

if or switch

if

  • 适合范围判断
  • 支持各种类型

switch

  • 适合多个数据选其一
  • 支持较少类型

循环结构

  • 初始语句只会执行 1 次

  • 条件判断语句每次循环前都会执行

  • 条件控制语句在每次循环结束后才执行。

for 循环

语法

for(初始语句;条件判断;条件控制){
  //满足条件执行的语句
}

案例

public class Main {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            System.out.print(i + " "); //0 1 2 3 4 5 6 7 8 9
        }
    }
}

foreach循环

即增强for循环。

for (元素类型 元素变量 : 集合或数组) {
    // 循环体
}

示例代码:

public class Main {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};
        for (int num : numbers) {
            System.out.print(num + " "); //  1 2 3 4
        }
    }
}

forEach

可以在集合类(如List、Set)或Map上使用。

collection.stream()
          .filter(predicate)
          .map(mapper)
          .forEach(action);

示例代码:

ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");

fruits.stream()
      .filter(fruit -> fruit.startsWith("A"))
      .forEach(System.out::println);

while 循环

语法

初始化语句;
while(条件判断){
  //满足条件执行的语句
  //条件控制语句
}

案例

public class Main {
    public static void main(String[] args) {
        int i = 0;
        while (i < 10) {
            System.out.print(i + " ");//0 1 2 3 4 5 6 7 8 9
        }
    }
}