【JavaSE】逻辑控制语句

简介: 顺序结构比较简单,即程序按照代码书写的顺序一行一行执行下去。

一. 顺序结构

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


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

19ffff240ed9425eb321870cfa475b30.png

二. 分支结构

1. if 语句

if 语句的基本语法形式包括以下三种:


a37eb6d6f26d4f9998ca37a2c4441a45.png代码示例


1、判定一个数字是奇数还是偶数


public static void main(String[] args) {
    int num = 13;
    if (num % 2 == 0) {
        System.out.println("偶数");
    } else {
        System.out.println("奇数");
    }
}


2、判定一个整数是正数还是负数


public static void main(String[] args) {
    int num = -10;
    if (num > 0) {
        System.out.println("num 是正数");
    } else if (num < 0) {
        System.out.println("num 是负数");
    } else {
        System.out.println("num 是0");
    }
}


3、判定某一年份是否是闰年


public static void main(String[] args) {
    int year = 2023;
    if (year%4 == 0 && year%100 != 0 || year%400 == 0) {
        System.out.println("是闰年");
    } else {
        System.out.println("不是闰年");
    }
}


注意事项


1、悬垂 else 问题


if / else 语句中可以不加花括号,此时只能匹配一条语句

4d84719662884f5a955f79da7e051395.png


不加花括号时 else 总是和最近的 if 匹配

2a0b20f912a2461388a76cacbb87a6fb.png


2、代码风格问题

9ba78296d3a745509c9f56ead3d9dcf0.png


3、分号问题


此处多写了一个分号,导致分号成为了 if 语句的语句体,而 { } 中的代码已经成为了和一个 if 无关的代码块,此时不论 if 成立于否 { } 代码块里的代码都会执行:


int x = 20;
if (x == 10); {
  System.out.println("hehe");
}
// 运行结果
hehe


2. switch 语句

语法格式如下:


switch(整数|枚举|字符|字符串) {
  case 内容1: {
  内容满足时执行语句;
  [break;]
  }
  case 内容2: {
  内容满足时执行语句;
  [break;]
  }
  ...
  default: {
  内容都不满足时执行语句;
  [break;]
  }
}


几点说明


根据 switch 中值的不同,会执行对应的 case 语句。遇到 break 就会结束该 switch 语句。

如果 switch 中的值没有匹配的 case,就会执行 default 中的语句。

建议一个 switch 语句最好都要带上 default

注意 long、float、double 和 boolean 这几个基本类型的值不能做 switch 的参数。

代码示例


根据 day 的值输出星期几


int day = 3;
switch(day) {
    case 1: {
        System.out.println("星期一");
        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("输入有误");
        break;
    }
}


3、循环结构

3.1 while 循环

循环条件为 true,则执行循环语句,否则结束循环。语法格式如下:


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

注意事项


和 if 类似,while 下面的语句可以不写 { } ,但是不写的时候只能匹配一条语句。建议还是加上 { }

和 if 类似,while 后面的 { 建议和 while 写在同一行

代码示例


1、打印 1 - 10 的数字


int num = 1;
while(num <= 10){
     System.out.println(num++);
}


2、计算 1 - 100 的和


int num = 1;
int sum = 0;
while(num <= 100){
    sum += num;
    num += 1;
}
System.out.println(sum);


3、计算 5 的阶乘


i

nt num = 1;
int ret = 1;
while(num <= 5){
    ret *= num;
    num += 1;
}
System.out.println(ret);

4、计算 1! + 2! + 3! + 4! + 5!


int num = 1;
int sum = 0;
// 外层循环求阶乘的和
while(num <= 5){
    // 那内层循环求每一个数的阶乘
    int tmp = 1;
    int fac = 1;
    while(tmp <= num){
        fac *= tmp;
        tmp += 1;
    }
    sum += fac;
    num += 1;
}
// 最后输出结果
System.out.println(sum);


3.2 do while 循环

语法格式如下,注意最后 while 后面要加个分号


do{
  循环语句;
}while(循环条件);

do while 不论条件成立与否,必定先执行一次循环语句,再判定循环条件:


10759668e64e4162b8c0e89ef777be12.png


3.3 for 循环

语法格式如下:


for(初始语句; 循环条件; 更新语句) {
  循环体;
}

相比于 while 循环,for 循环将初始语句、循环条件 和 更新语句合并在一起,这样写代码时不容易遗漏。


注意事项


和 if 类似,for 下面的语句可以不写 { } ,但是不写的时候只能支持一条语句。建议还是加上 { }。

和 if 类似,for 后面的 { 建议和 while 写在同一行。

建议有确定的循环次数时用 for;必须先执行一次循环体时用 do while;其他情况用 while。

代码示例


1、打印 1 - 10 的数字


for(int i = 0; i <= 10; ++i) {
    System.out.println(i);
}


2、计算 1 - 100 的和


int sum = 0;
for(int i = 0; i <= 100; ++i) {
    sum += i;
}
System.out.println(sum);


3、计算 5 的阶乘


int ret = 1;
for(int i = 1; i <= 5; ++i){
    ret *= i;
}
System.out.println(ret);


4、计算 1! + 2! + 3! + 4! + 5!


int sum = 0;
for(int i = 1; i <= 5; ++i){
    int fac = 1;
    for(int j = 1; j <= i; ++j){
        fac *= j;
    }
    sum += fac;
}
System.out.println(sum);


3.4 break 和 continue

break:执行此语句时,退出匹配最近的循环。


continue:执行此语句时,会立刻进入下次循环(判定循环条件)。


注意:break 和 continue 都必须用在循环中【特殊:beak 还可以用在 switch 中】,二者不适用于 if 语句。


三. 输入输出

1. 输出到控制台

Java 中常用输出语句有以下三种形式:


System.out.print(msg);  // 输出一个字符串, 不带换行
System.out.println(msg);// 输出一个字符串, 带换行
System.out.printf(format, msg);// 格式化输出

说明:


println 输出的内容自带 \n,print 不带 \n

printf 的格式化输出方式和 C 语言的 printf 是基本一致的

2. 从键盘输入

我们在做 OJ 时经常要用到从键盘输入 n 组数据,模板大致如下:


32bb9bb2cfc141b6a73b89ce83122683.png


注意事项


使用 Scanner 需要导入 util 包

当循环输入多个数据的时候,使用 ctrl + z 来结束输入 (Windows 上使用 ctrl + z,Linux / Mac 上使用 ctrl +d)


相关文章
|
算法 安全 数据安全/隐私保护
介绍一下移动应用中的数据加密技术。
移动应用数据加密保护隐私,包括对称加密(速度快但密钥管理难)、非对称加密(公钥私钥确保安全如RSA、ECC)、哈希函数(固定长度输出验证信息)和数字签名(公钥验证来源与完整性)。选择合适的加密算法对安全性至关重要,兼顾性能以不影响用户体验。加密技术确保信息的机密性、真实性和完整性,增强用户信任。开发者应熟练掌握这些工具。
468 0
|
JavaScript
js判断是否微信PC端打开内置浏览器
js判断是否微信PC端打开内置浏览器
|
Web App开发 编解码 安全
CentOS7下利用SRS搭建直播流媒体服务器
CentOS7下利用SRS搭建直播流媒体服务器
1265 0
CentOS7下利用SRS搭建直播流媒体服务器
|
开发者 程序员
基于阿里云快速搭建数字营销引擎【计算广告】
阿里云营销引擎有别于其他阿里云产品,它是配合阿里云MaxComputer,画像分析,分析型数据库等多个云产品,并在高德DMP和友盟+DMP提供人群分析能力的基础上,提供一整套数字营销解决方案。 在过去搭建一套成熟DSP平台需要一个强大的技术和业务团队,现在只需要一个人就能够轻松完成,大幅降低了系统构建的基础设施成本,运维成本,容灾成本,开发成本,时间成本。
3482 0
|
SQL 消息中间件 关系型数据库
实时计算 Flink版产品使用问题之元数据血缘可以通过什么来获取
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
定位技术
高德地图之获取经纬度并且根据获取经纬度渲染到路线规划
高德地图之获取经纬度并且根据获取经纬度渲染到路线规划
378 0
【洛谷 P2669】[NOIP2015 普及组] 金币 题解(循环)
`NOIP2015`普及组题目,骑士按周期领金币:第一天1枚,随后$n$天每天$n$枚,然后$n+1$天每天$n+1$枚。给定天数$k$,求总金币数。输入$k$,输出金币总数。样例输入6,输出14;输入1000,输出29820。代码使用循环和变量控制周期,累计金币数。
438 0
|
存储 Ubuntu Java
Ubuntu安装JDK与IntelliJ IDEA
APT(Advanced Package Tool)是Linux系统上的包管理工具,能自动解决软件包依赖关系并从远程存储库中获取安装软件包。推荐使用APT管理软件包,因为它简便易用且有效地处理依赖关系,无需手动配置环境变量。这样,您可以轻松地安装和更新软件包,而APT会自动处理所有必需的依赖项,确保系统的稳定性和功能正常运行。
440 1
|
存储 缓存 算法
数据结构与算法第十六讲:分布式算法之一致性Hash算法
数据结构与算法第十六讲:分布式算法之一致性Hash算法
316 0