【Java SE语法篇】4.程序逻辑控制

简介: 【Java SE语法篇】4.程序逻辑控制


1. 顺序结构

顺序结构比较简单,按照代码书写的顺序一行一行执行。

public class Test {
    public static void main(String[] args) {
        System.out.println("aaa");
        System.out.println("bbb");
        System.out.println("ccc");
        /* 运行结果
            aaa
            bbb
            ccc
         */
    }
}

如果调整代码的书写顺序, 则执行顺序也发生变化。

public class Test {
    public static void main(String[] args) {
        System.out.println("aaa");
        System.out.println("ccc");
        System.out.println("bbb");
        /* 运行结果
            aaa
            ccc
            bbb
         */
    }
}

2. 分支结构(选择结构)

它的作用是根据判断的条件是否成立(真或假),来决定后续代码执行顺序。

举例:

如同在岔路口做选择。不同的选择会带来不同的路径及结果。

2.1 if 语句

  1. 语法格式1
if (布尔表达式) {
    // 语句
}
  1. 如果布尔表达式结果为true,执行if中的语句,否则不执行。
    执行流程:

    举例:小明,如果这次考试考60分或以上就不挂科。
public class Test {
    public static void main(String[] args) {
        int score = 90;
        if (score >= 60) {
            System.out.println("不挂科");
        }
    }
}
  1. 语法格式2
if (布尔表达式) {
    // 语句
} else {
    // 语句
}
  1. 如果布尔表达式结果为true,执行if中的语句,执行else中的语句。
    执行流程:

    举例:小明,如果这次考试考60分或以上就不挂科,没有考到60分就挂科。
public class Test {
    public static void main(String[] args) {
        int score = 90;
        if (score >= 60) {
            System.out.println("不挂科");
        } else {
            System.out.println("挂科");
        }
    }
}
  1. 语法格式3
if(布尔表达式1){
    // 语句1
 }else if(布尔表达式2){
    // 语句2
 }else{
    // 语句2
}
  1. 表达式1成立,执行语句1,否则表达式2成立,执行语句2,否则执行语句3比如:考虑到学生自尊,不公开分数排名,因此:
  • 分数在 [90, 100] 之间的,为优秀
  • 分数在 [80, 90) 之前的,为良好 分数在 [70, 80) 之间的,为中等
  • 分数在 [60, 70) 之间的,为及格 分数在 [ 0, 60) 之间的,为不及格
  • 错误数据
  1. 按照上述办法通知学生成绩。
public class Test {
    public static void main(String[] args) {
        int score = 90;
        if(score >= 90){
            System.out.println("优秀");
        }else if(score >= 80 && score < 90){
            System.out.println("良好");
        }else if(score >= 70 && score < 80){
            System.out.println("中等");
        }else if(score >= 60 && score < 70){
            System.out.println("及格");
        }else if(score >= 0 && score < 60){
            System.out.println("不及格");
        }else{
            System.out.println("错误数据");
        }
    }
}

【注意事项】:

  • 代码风格
// 风格1-----> 推荐
int x = 10;
 if (x == 10) {
    // 语句1
 } else {
    // 语句2
 }
 
// 风格2
int x = 10;
 if (x == 10)
 {
    // 语句1
 }
 else
 {
    // 语句2
 }
  • 虽然两种方式都是合法的, 但是 Java 中更推荐使用风格1,代码跟紧凑。
  • 分号问题
int x = 20;
if (x == 10); 
{
    System.out.println("hehe");
}
 
// 运行结果
hehe
  • 此处多写了一个 分号, 导致分号成为了 if 语句的语句体, 而 { } 中的代码已经成为了和一个 if 无关的代码块,所以运行结果是haha,而不是空白。
  • 悬垂 else 问题
int x = 10;
int y = 10;
 if (x == 10) 
    if (y == 10)
        System.out.println("aaa");
else 
    System.out.println("bbb");
  • if else 语句中可以不加大括号 . 但是也可以写语句(只能写一条语句). 此时 else 是和最接近的 if 匹配. 但是实际开发中我们不建议这么写. 最好加上大括号.

2.2 switch 语句

基本语句

switch(表达式){
    case 常量值1:{
        语句1;
        [break;]
        }
    case 常量值2:{
        语句2;
        [break;]
        }
    ...
    default:{
        内容都不满足时执行语句;
        [break;]
        }       
 }

执行流程:

  1. 先计算表达式的值
  2. case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束
  3. 当表达式的值没有与所列项匹配时,执行default

代码示例:

public class Test {
    public static void main(String[] args) {
        String week = "周四";
        switch (week) {
            case "周一":
                System.out.println("埋头苦干,写程序");
                break;
            case "周二":
                System.out.println("请求学长帮忙解决bug");
                break;
            case "周三":
                System.out.println("今晚烧烤、小龙虾");
                break;
            case "周四":
                System.out.println("帮助学妹解决bug");
                break;
            case "周五":
                System.out.println("今晚吃鸡");
                break;
            case "周六":
                System.out.println("上GitHub交友");
                break;
            case "周日":
                System.out.println("郁郁寡欢、准备上课");
            default:
                System.out.println("输入错误");
        }
    }
}

【注意事项】:

  • 多个case后的常量值不可以重复
  • switch的括号内只能是以下类型的表达式:
  • 基本类型:byte、char、short、int,注意不能是long类型
  • 引用类型:String常量串、枚举类型
  • break 不要遗漏, 否则会失去 “多分支选择” 的效果
int day = 1;
switch(day) {
    case 1:
        System.out.println("星期一");
        // break;
    case 2:
        System.out.println("星期二");
        break;
 }
// 运行结果
星期一
星期二
  • switch 不能表达复杂的条件
// 例如: 如果 num 的值在 10 到 20 之间, 就打印 hehe
 // 这样的代码使用 if 很容易表达, 但是使用 switch 就无法表示. 
if (num > 10 && num < 20) {
    System.out.println("hehe");
}
  • switch 虽然支持嵌套, 但是很丑,一般不推荐
public class Test {
    public static void main(String[] args) {
        int x = 1;
        int y = 1;
        switch(x) {
            case 1:
                switch(y) {
                    case 1:
                        System.out.println("hehe");
                        break;
                }
                break;
            case 2:
                System.out.println("haha");
                break;
        }
    }
}

综上, 我们发现, switch的使用局限性是比较大的

3. 循环结构

循环结构它是在满足条件的情况下,反复执行某一段代码的计算过程。

举例:

我们要围着操场跑 5 圈,跑圈这个行为就重复了 5 次,也就是循环了 5 次。

3.1 while 语句

基本格式:

while (循环条件) {
    // 语句
}

执行流程:

首先执行判断表达式,表达式的值为false,循环直接结束;表达式的值为true,则执行循环语句,语句执行完后再继续判断,是否进行下一次判断。

代码示例:打印1~10的值

public class Test {
    public static void main(String[] args) {
        int i = 1;
        while (i <= 10) {
            System.out.println(i);
            i++;
        }
    }
}

3.2 for 语句

基本格式:

for (表达式1;表达式2;表达式3) {
    // 语句
}

表达式1:用于循环变量的初始化

表达式2:用于循环结束条件的判断

表达式3:用于循环变量的调整

执行流程:

首先执行表达式1初始化循环变量,接下来就是执行表达式2的判断部分,表达式2的结果如果为false,则循环结束;如果表达式2的结果为true,则执行循环语句,循环语句执行完后,再去执行表达式3,调整循环变量,然后再去表达式2的地方执行判断,表达式2的结果是否为false,决定循环是否继续。

整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环

代码示例:打印1~10的值

public class Test {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            System.out.println(i);
        }
    }
}

3.3 do…while循环

基本格式:

do{
    语句
}while(表达式);

whilefor 这两种循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满足就跳出循环;

do...while 循环则是先直接进入循环体,执行循环内部,然后在执行 while 后的判断表达式,表达式为真,就会进行下一次,表达式为false,则不再继续循环。

执行流程:

do...while 循环中先执行图上的“语句”,执行完语句,在去执行“判断表达式”,在判断表达式的结果是true,则继续循环,执行循环;判断表达式的结果false,则循环结束。

所以在do...while 语句中循环体是至少执行一次的,这是do...while 循环比较特殊的地方。

代码示例:打印1~10的值

public class Test {
    public static void main(String[] args) {
        int i = 1;
        do {
            System.out.println(i);
            i++;
        } while (i <= 10);
    }
}

3.4 while语句 和 for语句的对比

4. break和continue

在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环。

  • break 的作用是用于永久的终止循环,只要break 被执行,直接就会跳出循环,继续往后执行。
    代码示例:找到100~200之间的第一个3的倍数
public class Test {
    public static void main(String[] args) {
        for (int num = 100; num <= 200; num++) {
            if (num % 3 == 0) {
                System.out.println(num);
                break;
            }
        }
    }
}
// 运行结果 102
  • continue 的作用是跳出本次循环 continue 后边的代码
    代码示例:找到100~200中的所有3的倍数
public class Test {
    public static void main(String[] args) {
        for (int num = 100; num <= 200; num++) {
            if (num % 3 == 0){
                System.out.println(num);
                continue;
            }
        }
    }
}
相关文章
|
22天前
|
传感器 安全 算法
消防救援支队消防员单兵装备智能养护舱电机驱动java版程序(二)
本文探讨消防救援中智能养护舱电机驱动的Java程序设计,作为系列文章第二部分。通过自动化和智能化手段,智能养护舱提升了装备维护效率与准确性。文章详细介绍了电机驱动模块的设计与实现,包括硬件选型、PID控制策略、安全保护机制及Java程序架构,确保电机精确控制、稳定性和安全性。未来将优化功能并引入智能算法和物联网技术,进一步提升装备维护智能化水平。
|
22天前
|
IDE Java 开发工具
消防救援支队消防员单兵装备智能养护舱点击驱动java版程序(一)
智能消防作战服架通过电机驱动系统提升消防员作业效率和安全性。本文介绍基于Java的电机驱动程序开发,涵盖硬件准备、软件环境搭建及驱动程序实现。重点包括串口通信配置、电机控制类设计与控制逻辑实现,确保电机高效稳定运行。通过正确配置通信协议和串口参数,并添加异常处理机制,保障系统的安全性和可靠性。
|
2月前
|
Java
java do while 的语法怎么用?
java do while 的语法怎么用?
64 3
|
3月前
|
SQL 安全 Java
Java 异常处理:筑牢程序稳定性的 “安全网”
本文深入探讨Java异常处理,涵盖异常的基础分类、处理机制及最佳实践。从`Error`与`Exception`的区分,到`try-catch-finally`和`throws`的运用,再到自定义异常的设计,全面解析如何有效管理程序中的异常情况,提升代码的健壮性和可维护性。通过实例代码,帮助开发者掌握异常处理技巧,确保程序稳定运行。
72 2
|
3月前
|
IDE Java 编译器
开发 Java 程序一定要安装 JDK 吗
开发Java程序通常需要安装JDK(Java Development Kit),因为它包含了编译、运行和调试Java程序所需的各种工具和环境。不过,某些集成开发环境(IDE)可能内置了JDK,或可使用在线Java编辑器,无需单独安装。
141 2
|
4月前
|
Java 编译器 Android开发
Kotlin语法笔记(28) -Kotlin 与 Java 混编
本系列教程详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。对于希望快速学习Kotlin的用户,推荐查看“简洁”系列教程。本文档重点介绍了Kotlin与Java混编的技巧,包括代码转换、类调用、ProGuard问题、Android library开发建议以及在Kotlin和Java之间互相调用的方法。
92 1
|
4月前
|
安全 Java 编译器
Kotlin语法笔记(27) -Kotlin 与 Java 共存(二)
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。若需快速入门,建议查阅“简洁”系列教程。本文重点探讨Kotlin与Java共存的高级话题,包括属性访问、空安全、泛型处理、同步机制及SAM转换等,助你在项目中逐步引入Kotlin。
48 1
|
4天前
|
Java 程序员 开发者
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
49 14
|
7天前
|
安全 Java 程序员
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
38 13
|
8天前
|
安全 Java 开发者
【JAVA】封装多线程原理
Java 中的多线程封装旨在简化使用、提高安全性和增强可维护性。通过抽象和隐藏底层细节,提供简洁接口。常见封装方式包括基于 Runnable 和 Callable 接口的任务封装,以及线程池的封装。Runnable 适用于无返回值任务,Callable 支持有返回值任务。线程池(如 ExecutorService)则用于管理和复用线程,减少性能开销。示例代码展示了如何实现这些封装,使多线程编程更加高效和安全。