Java 逻辑控制详解分析
作者:Lockey-s 发布时间:2023-08-13 20:08:11
顺序结构
顺序结构就是按照代码从上往下执行,我们运行的程序就是从上往下的顺序结构,当遇到方法的时候,才去执行方法。例如:
System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
当改变代码顺序的时候,输出的结果也不一样。例如:
System.out.println("bbb");
System.out.println("ccc");
System.out.println("aaa");
分支结构
if 语句
if 语句的基本语法(单判断):
if(布尔表达式){
//条件满足时执行代码
}
if 语句的基本语法(加否定):
if(布尔表达式){
//条件满足时执行代码
}else{
//条件不满足时执行代码
}
if 语句的基本语法(多分支):
if(布尔表达式){
//条件满足时执行代码
}else if(布尔表达式){
//条件满足时执行代码
}else{
//条件都不满足时执行代码
}
if 语句当中可以写很多 else if ,但是 if 和 else 只能有一个。
代码实例 1:判断一个数是奇数还是偶数:
int num = 10;
if (num % 2 == 0) {
System.out.println("num 是偶数");
} else {
System.out.println("num 是奇数");
}
代码实例2:判定一个数是正数还是负数。
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:判定一年是不是闰年。
因为闰年的规律是:如果这一年是 4 的倍数,且不是 100 的倍数,那么这一年就是闰年。或者这个数能整除 400 。
Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();
if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) {
System.out.println(i + " 是闰年");
} else {
System.out.println(i + " 不是闰年");
}
这里是通过 Scanner 来输入一个数。
悬垂 else 问题
此代码输出什么?
int x = 10;
int y = 10;
if (x == 20)
if (y == 10)
System.out.println("aaa");
else
System.out.println("bbb");
这里什么都不输出 ,因为这里就涉及到了悬垂 else 。else 只与最近的 if 相匹配,这里最近的 if 是 y==10 所以就什么都不输出了。
所以我们平时写代码,一定要加上括号,这样既方便别人阅读代码,也方便我们自己去修改。
switch 语句
基本语法:
switch(整数|枚举|字符|字符串){
case 内容1 : {
内容满足时执行语句;
[break;]
}
case 内容2 : {
内容满足时执行语句;
[break;]
}
...
default:{
内容都不满足时执行语句;
[break;]
}
}
switch 语句是我们常见的多分支语句,可根据 switch 括号内的变量对应的值去执行相应的 case 语句。而且每个 case 语句下面都要有 break 否则会继续执行下面的 case 语句。当 switch 语句当中没有匹配的 case 语句的时候,就会执行 default 语句。switch 虽然也可以嵌套,但是嵌套之后会很乱,非常不易于阅读代码。所以尽量不要嵌套。
代码示例:
int day = 7;
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;
}
循环结构
while 循环
基本语法:
while(循环条件){
循环语句;
}
要注意的是:循环条件是 true 就执行循环语句,否则就结束循环。例如求 1 - 10 的和:
int n = 1;
int sum = 0;
while (n <= 10){
sum += n;
n++;
}
System.out.println(sum);
这里就是通过 while 循环来计算 1 - 10 的和。
while 循环和 if 语句一样,while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句。所以为了方便阅读和后期的维护,还是应该加上括号。就像这样:
int num = 1;
while (num <= 10)
System.out.println(num);
num++;
因为只能执行一条语句,所以就一直死循环。
break
在循环结构当中,break 也是经常用到的。break 就是让循环提前结束。例如:找到 1 - 10 中第一个 3 的倍数。
int num = 1;
while (num <= 10) {
if (num % 3 == 0) {
System.out.println("找到了 3 的倍数 为:" + num);
break;
}
num++;
}
执行到 break 的时候,就会让循环结束。但是要注意的是:如果是多层循环嵌套 break 结束的是最近的一层循环。
continue
continue 的功能是跳过这次循环, 进入下次循环。就是这次循环当中 continue 下面的代码不执行,进入下一次循环。例如:找到 100 - 200 中所有 3 的倍数。
int num = 100;
while (num <= 200) {
if (num % 3 != 0) {
num++;
continue;
}
System.out.println("找到了 3 的倍数, 为:" + num);
num++;
}
执行到 continue 语句的时候, 就会立刻进入下次循环(判定循环条件), 从而不会执行到下方的打印语句,所以不是 3 的倍数的数就没有打印出来。
for循环
语法:
for(表达式1;表达式2;表达式3){
循环体;
}
表达式1: 用于初始化循环变量.
表达式2: 循环条件
表达式3: 更新循环变量.
相对于 while 循环,for 循环会把这三个部分结合在一起,降低出现 bug 的可能。举例:求 1- 100 的和
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("sum = " + sum);
do while 循环
语法:
do{
循环语句;
}while(循环条件);
do while 循环是先执行循环语句,在判断循环条件,如果循环条件为 true 就继续循环,否则就退出循环。不论如何 do while 循环 都会执行一次。循环最后的分号一定不要忘记。举例:求 1 - 100 的和。
int num = 1;
int sum = 0;
do {
sum += num;
num++;
} while (num <= 100);
System.out.println(sum);
一般 do while 很少用到, 更推荐使用 for 和 while 。
来源:https://blog.csdn.net/sjp151/article/details/120831755


猜你喜欢
- 前言Graalvm通过静态分析提前编译来为Java应用程序构建高度优化的本机可执行文件,这就需要在编译时就知道所有的程序类型,而java中的
- C#中添加窗口的步骤:1是添加窗口。2是在程序中使用new实例化窗口类对象,并显示窗口。1 添加窗口在解决方案管理器->主项目名称-&
- 1.值类型值类型包括:数值类型,结构体,bool型,用户定义的结构体,枚举,可空类型。值类型的变量直接存储数据,分配在托管栈中。变量会在创建
- 要点有另一种方法来完成语句映射。 它们映射的语句可以不用 XML 来配置,而可以使用 Java 注解来配置。使用注解来映射简单语句会使代码显
- 一个界面,实现在向页面添加图片时,在标题上显示一个水平进度条,当图片载入完毕后,隐藏进度条并显示图片具体实现方法:res/layout/ma
- 前言spring中解析元素最重要的一个对象应该就属于 BeanDefinition了;这个Spring容器中最基本的内部数据结构;它让xml
- 如果项目需求是从某些复杂的json里面取值进行计算,用jsonpath+IK(ik-expression)来处理十分方便,jsonpath用
- 前言最近在学习Kotlin这门语言,在项目开发中,运用到了单例模式。因为其表达方式与Java是不同的。所以对不同单例模式的实现进行了分别探讨
- 同步器简介 学习以来对线程的操作有很大的改观,从c/c++的mute
- 一个比较常见的改进用户体验的方案是用Redo/Undo来取代确认对话框,由于这个功能比较常用,本文简单的给了一个在C#中通过Command模
- using 指令有两个用途: 允许在命名空间中使用类型,以便您不必限定在该命名空间中使用的类型。 为命名空间创建别名。 using
- 本文实例讲述了C# Console利用mspaint打开图像并保存的方法。分享给大家供大家参考,具体如下:调用画图板压缩图片System.D
- 这是自己写的简单的解析pcap文件,方便读取pcap文件,大家参考使用吧InputStream is = DataParser.class.
- engine的实现结构elasticsearch对于索引中的数据操作如读写get等接口都封装在engine中,同时engine还封装了索引的
- 一、数组创建1.1 声明并赋值int[] a = {1,2,3};1.2 声明数组名开辟空间并且赋值int[] a;a = new int[
- Android webveiw 出现栈错误解决办法前言:最近做一个项目,项目调试基础库的一个调试工具展示设备信息页面使用WebView。有一
- 本文实例讲述了Android应用启动另外一个apk应用的方法。分享给大家供大家参考,具体如下:在开发的过程中,经常会遇到在一个应用中启动另外
- TabLayout+ViewPager实现tab和页面联动效果xml中:<?xml version="1.0" e
- 在layout文件中使用自定义的View时遇到如下错误:12-11 17:28:26.962: ERROR/AndroidRuntime(1
- 目录1、若 a 的值为 3 时,下列程序段被执行后, c 的值是多少?( )2、以下哪项不是java基础类型()3、Java中只有整型才能使