当前位置: 首页 > news >正文

【Java】逻辑控制

当你停下脚步

别忘了别人还在奔跑


目录

1.程序控制语句分类 

2.顺序结构 

2.选择结构

2.1 if 选择语句

2.2 switch 选择语句

3.循环结构 

3.1 while 循环语句 

3.2 break

3.3 continue 

3.4 for 循环

3.5 do...while 循环 

4.输入输出 

4.2 输入 


1.程序控制语句分类 

Java中一共有三大结构,分别是 顺序结构、选择结构、循环结构

  1. 顺序结构:按顺序依次执行的
  2. 选择结构:因为选择的不同,对应的结果也是不同的
  3. 循环结构:重复做着某一件事情,直到条件不满足才会终止循环

2.顺序结构 

public class Test {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println(a);
        System.out.println(b);
    }
}

按照代码的顺序一行一行的执行就是顺序结构

如果代码的顺序发生改变了,那么执行的顺序也会发生对应个改变

2.选择结构

选择结构又叫做分支结构,因为选择的不同最后的执行的选择体中的代码也不同。假设小美去买彩票,如果她买的彩票号码与中奖彩票号码一样则小美中奖,否则小美不中奖

选择结构一共有两种语句一个是 if 语句,还有一个是 switch 语句 

2.1 if 选择语句

①单独的 if 语句

public class Test {
    public static void main(String[] args) {
        int a = 10;
        if(a == 10) {
            System.out.println("中奖");
        }
        System.out.println(a);
    }
}

打印结果: 

如果 if 后面的条件判断语句为真,则执行 if 语句体,也就是打印中奖。如果为假,则不执行 if 语句体

注:不管执不执行 if 语句体,if 语句体以外的语句都要执行。也就是不管执不执行 if 语句体,都要打印 a 的值

② if...else... 语句

public class Test {
    public static void main(String[] args) {
        int a = 10;
        if(a == 10) {
            System.out.println("中奖");
        } else {
            System.out.println("没中奖");
        }
    }
}

执行结果: 

如果 if 后面的条件判断语句为真,则执行 if 语句体否则执行 else 语句体

注:if 语句体 和 else 语句体不会都执行,只会执行其中一个 

③ if...else if...else 多层判断选择语句

public class Test {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        if(a == 10) {
            System.out.println("a中奖");
        } else if(b == 20) {
            System.out.println("b中奖");
        } else {
            System.out.println("没中奖");
        }
    }
}

 执行结果:

如果 if 后面的条件判断语句为真,则执行 if 语句体 。否则判断 else if 后面的条件判断语句是否为真,如果为真则执行 else if 语句体,否则执行 else 语句

注:多层判断选择语句也只会执行其中的一个语句体

if 选择语句注意事项

注意1:分号问题

这个代码还是会打印 a中奖,但是这并不是在选择语句体中打印的,造成的原因就是 if 判断语句后面的那个分号。if 后面的条件判断语句为真,则执行 if 后面的一条语句。所有语句被 {} 花括号的括起来称为语句体,被视为一条语句。分号默认是一条语句的结束标志,当 if 后面的条件判断语句为真当准备执行 if 后面的一条语句的时候,发现是分号,也就表示已执行完,其实执行的就是空语句

注意2:悬垂 else 问题

public class Test {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        if (a == 6)
            if(a == 5)
                System.out.println("yes");
        else
                System.out.println("no");
    }
}

问题:else 与哪个 if 匹配? 

答:if / else 语句中可以不加 大括号,也可以写语句(只能写一条语句)。此时 else 是和最接近的 if 匹配 

上述代码中最后没有打印结果因为 else 与第二个 if 匹配了。 

通过上面两个代码我们就可以充分感受到代码风格以及代码规范的重要性。

注:分号不要随处放,语句体记得加花括号

2.2 switch 选择语句

switch 语句又叫做多分支语句,通常用在多分支里面。当用 if 使用起来比较复杂的时候我们就可以使用多分支。

比如:输入 1~7 之间的某一个数,然后打印对应的星期,如果用 if 来完成就会涉及到多层 else if 相对就比较复杂,这时我们就可以使用 switch 选择语句

public class Test {
    public static void main(String[] args) {
        int a = 1;
        switch (a) {
            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("超出1~7范围");
        }

    }
}

执行流程

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

上述代码执行逻辑,首先计算 switch 后面表达式的值,然后拿这个值依次与 case 后面的常量匹配,一旦匹配上执行该项下的语句,直到遇到break退出,否则一直执行下次。如果一个都没有匹配上则执行 default

注:case后的常量值不可以重复,不要遗忘 break

3.循环结构 

当条件满足,将一直循环下去的语句就叫做循环语句。假设小美买彩票没中奖,只要小美买彩票没中奖,那么她就会每天买,只要她中奖了则就会停止购买,这就叫做循环

3.1 while 循环语句 

public class Test {
    public static void main(String[] args) {
        int a = 1;
        while(a <= 10) {
            System.out.printf("%d ",a);
            a++;
        }
    }
}

执行结果: 

上述代码循环语句首先执行 while 后面的判断表达式,如果结果为 true 则执行循环体,然后再判断 while 后面的判断表达式,如果结果为 true 则继续执行循环体,...,直到 while 后面的判断表达式结果为 false 则退出循环

如果上述代码中没有 a++ 则会造成死循环 

所以循环一共有三部分,分别是:初识值,结束条件,接近结束条件的变化 

3.2 break

break:如果在循环体里面,则直接跳出循环。如果在多分支里面,则跳出多分支

public class Test {
    public static void main(String[] args) {
        int a = 1;
        while(a <= 10) {
            if(a == 7) {
                break;
            }
            System.out.printf("%d ",a);
            a++;
        }
    }
}

运行结果:

执行到 break 就会让循环结束 

上述代码执行逻辑,先执行 while 后面的判断表达式,如果为 true 则循环体,循环体里面判断选择语句是否为 true ,如果为 true 直接跳出循环,否则继续往下执行

3.3 continue 

continue 直接结束本次循环,不会直接跳出循环 

public class Test {
    public static void main(String[] args) {
        int a = 1;
        while(a <= 10) {
            a++;
            if(a == 7) {
                continue;
            }
            System.out.printf("%d ",a);
        }
    }
}

执行结果: 

上述代码执行逻辑,先执行 while 后面的判断表达式,如果为 true 则循环体,循环体里面判断选择语句是否为 true ,如果为 true 跳出本次循环继续执行下一次循环

注意: 

public class Test {
    public static void main(String[] args) {
        int a = 1;
        while(a <= 10) {
            if(a == 7) {
                continue;
            }
            a++;
            System.out.printf("%d ",a);
        }
    }
}

一样的代码,可能顺序不一样最后的结果也就不一样。这个代码就因为 a++选择语句后面就造成了死循环,当 a == 7 时,跳出本次的循环,也就是本次循环 if 语句以下的语句是不会执行的。那么这次循环并没有执行到 a++,那么 a 的值还是 7,进入循环遇到 if 语句执行 continue,又结束了本次循环但 a 还是 7,因此就造成了死循环

注:代码语句顺序还是很重要滴 

3.4 for 循环

语法格式:

表达式①:用于给循环变量设置初始值, 在程序开始时是便会执行,且只会执行一次

表达式②:循环条件的判断,如果判断为 true 则继续执行循环体,否则循环结束

表达式③:循环变量更新方式

for 循环的执行过程:

  1. 首先执行表达式①,然后判断表达式②,如果为真则执行表达式④(否则直接退出循环),然后在执行表达式③
  2. 判断表达式②,如果为真则执行表达式④(否则退出循环)。然后在执行表达式③
  3. 跟 2 的顺序一样,直到表达式②为false,退出循环
public class Test {
    public static void main(String[] args) {
        for (int i = 1; i <= 10;i++) {
            System.out.printf("%d ",i);
        }
    }
}

执行结果: 

  • for 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }
  • for 后面的 { 建议和 for 写在同一行.
  • for 后面不要多写 分号, 否则可能导致循环不能正确执行.
  • 和while循环一样,结束单趟循环用continue,结束整个循环用break 

3.5 do...while 循环 

do...while循环又叫做直到型循环,它是先执行后判断 

语法格式: 

先执行循环语句, 再判断循环条件,循环条件为 true 则继续执行,否则循环结束 

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

 执行结果:

注:do while 循环最后的分号不要忘记 

4.输入输出 

4.1 输出 

public class Test {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(a);//输出加换行
        System.out.print(a);//输出不换行
        System.out.printf("%d",a);//格式化形式输出
    }
}

输出结果:

  • println:输出,加换行
  • print:输出,不换行
  • printf:格式化形式输出 

所以最好两个打印打印到一行了。 

4.2 输入 

使用 Scanner 读取字符串/整数/浮点数 

在使用 Scannery 之前需要导入 util 包 

后面学习了类就自然理解了为什么要导入 util 包了 

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        System.out.println(a);
    }
}

大家现在只需要记住在使用类之前需要new一个对象,也就是在使用Scanner 之前需要 new 一个Scanner ,然后才能通过 scanner 这个对象去使用

相关文章:

  • Qt下生成pdb文件,并在exe崩溃时生成dmp文件,且由dmp查询崩溃原因
  • 蜂鸣器、风扇、震动马达
  • 【VRP问题】基于帝国企鹅优化算法求解冷链配送物流车辆调度优化研究
  • 3) 时频分析与傅立叶变换
  • stm32f4xx-I2C
  • 有了这个 Python 库,以后再也不用写正则表达式了
  • 学习python很无聊?看看这几个有意思的代码,拿去整蛊一下好朋友~ 适当娱乐哈
  • 【老生谈算法】matlab实现滤波器设计源码——滤波器设计
  • 后端研发工程师面经——手撕设计模式
  • 1679. K 和数对的最大数目-自定义哈希表解决
  • 【Objective-C内存管理之引用计数】
  • 找工作经验总结——嵌入式软件工程师必备的能力(表达篇)
  • 【vue基础篇】极简 ESLint + Prettier 配置教程
  • 线性代数-----矩阵复习2
  • 个人算法重刷记录
  • 4个实用的微服务测试策略
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Github访问慢解决办法
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • js作用域和this的理解
  • Laravel Mix运行时关于es2015报错解决方案
  • Odoo domain写法及运用
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Ruby 2.x 源代码分析:扩展 概述
  • Vue UI框架库开发介绍
  • windows下使用nginx调试简介
  • 笨办法学C 练习34:动态数组
  • 力扣(LeetCode)56
  • 前端设计模式
  • 使用API自动生成工具优化前端工作流
  • 微信小程序:实现悬浮返回和分享按钮
  • 一起参Ember.js讨论、问答社区。
  • 因为阿里,他们成了“杭漂”
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 阿里云ACE认证之理解CDN技术
  • 阿里云服务器购买完整流程
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​低代码平台的核心价值与优势
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #pragam once 和 #ifndef 预编译头
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • ${factoryList }后面有空格不影响
  • (10)ATF MMU转换表
  • (SpringBoot)第七章:SpringBoot日志文件
  • (二)学习JVM —— 垃圾回收机制
  • (南京观海微电子)——COF介绍
  • (四)模仿学习-完成后台管理页面查询
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)http协议
  • (转)关于pipe()的详细解析
  • (转)甲方乙方——赵民谈找工作
  • .aanva
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)