资讯专栏INFORMATION COLUMN

Java杂记3—流程控制之条件

jackzou / 1898人阅读

摘要:流程控制首先来介绍程序的流程控制。后面跟一个代码块逻辑关系是当布尔表达式为真的时候执行代码块,为假的时候不执行。

流程控制

首先来介绍程序的流程控制。

所谓的流程控制,就是在我们前面的课程中我们已经学过了变量,数据类型,运算符,表达式,这些都是计算机编程的基本元素,但是我们程序的基本执行单元应该是语句,程序执行,执行的不是表达式,而是执行语句。就好像我们小时候先学认字儿,再学组词,但最终要学造句,因为写作文一定是一句话一句话的写。

那么计算机程序一定会有多个语句,这个语句的执行顺序就叫做流程控制,我代码中这么多语句先执行谁后执行谁,每个语句执行几遍,要不要执行要不要不执行这都叫流程控制。

顺序执行流程,我们的所有语句都放在主函数里,他一定是从主函数的第一句开始执行,然后执行第二句,第三句,直到把主函数中的每一句自上而下都执行一遍的时候,程序执行结束。比如我在主函数中写十个打印语句,他一定是一句一句的执行,这显然是计算机软件最基本的一种执行流程,顺序执行流程。

条件分支流程

而现在我们要介绍的是条件分支流程,条件分支流程也叫做分支结构,选择结构,它主要解决的是有些语句我在执行以前要先去判断一个条件,根据这个条件来决定这条语句,或者后面的某个代码块执行或者不执行。如果说以前的顺序流程是每句话执行一遍的话,条件分支结构是每句话执行0-1遍,也许条件成立会执行,条件不成立这句话就会不执行。

if语句

说到条件分支流程,最基本的语法就是一个if语句,语法结构如下。

if(布尔表达式){
  代码块
}

关键字if,If后面方一个圆括号 圆括号里写什么?必须是一个布尔表达式 不可以写整数。在C语言中布尔表达式和整数表达式是相同的,0表示假,非0值表示真,但是在java中真就是真 1就是1 真不是1 1也不是真 这是java和c的重要区别,其实也是java简单性的体现。

解释一下,例如int a = 10   int b =5

本来我要比较a和b是否相等,if(a==b) 但是我写错了,少写了一个等号,写成了if(a=b)。那么在java中一个等号是赋值表达式最后的结果是5 是会报错的,但是在C中是没有问题的,不会报错。这样的错误不能及时发现就会造成一定的问题,而实际上在C的开发中这也确实是一个问题。所以java在设计的时候就补上了这个漏洞,其结果就是在java中if后面的圆括号中只能够放布尔表达式。

后面跟一个代码块 逻辑关系是当布尔表达式为真的时候执行代码块,为假的时候不执行。所谓代码块就是一个花括号,咱们也没少见,类啊,方法啊都是一个花括号。

举个例子,用户输入一个整数,我们通过程序来判断这个整数是偶数还是奇数,如果是偶数就输出偶数到控制台,如果是奇数就什么也不输出。代码如下:

Scanner s = new Scanner(System.in);
int n = s.nextInt();

if(n%i==0){
  System.out.println("偶数");
}

这就是最基本的if语句。

if else语句

那么我们的逻辑继续变化,如果那个数字儿是偶数就打印偶数两个字儿,如果是奇数就打印奇数两个字儿。那么这时候需要第二个语法结构,if else。

if(布尔表达式){
  代码块1
}else{
  代码块2
}

当布尔表达式为真的时候执行代码块1,else就是否则的意思,什么叫否则,就是当前面的那个布尔表达式为假的时候就执行else后面的代码块,这就真正是条件分支了,代码块1和代码块2怎么着都会执行一个,条件为真执行代码块1,条件为假执行代码块2。
根据这个逻辑我们对之前的代码做一定的修改,如果条件为假else后面再加一个代码块打印奇数。

Scanner s = new Scanner(System.in);
int n = s.nextInt();

if(n%i==0){
  System.out.println("偶数");
}else{
  System.out.println("奇数");
}

以上就是if else结构。

if else if

下面我们看一下多重if else结构,它会有多个条件,语法结构如下

if(条件1){
  代码块1
}else if(条件2){
  代码块2
}else if(条件3){
  代码块3
}else{
  代码块4
}

先是if条件1,当条件1成立的时候会执行代码块1,else if条件2,else代表当条件1不满足的时候,进入这个else,判断条件2,条件2成立执行对应代码块,然后执行结束。如果进入第三个条件,说明前两个条件都不满足,这时候再来判断条件3,如果不满足条件3,就会到最后一个else中,最后一个可以加if也可以不加,实际上就是前面所有的条件都不满足就会到最后的else代码块中。

根据这个语法逻辑举个例子,加入输入的整数是月份,根据输入的整数判断是那个季节,1-3是春节,4-6是夏季,依次。

Scanner s = new Scanner(System.in);
int n = s.nextInt();

if(n<=3){
  System.out.println("春天");
}else if(n<=6){
  System.out.println("夏天");
}else if(n<=9){
  System.out.println("秋天");
}else{
  System.out.println("冬天");
}

以上是关于if语句所有的语法结构,额外的再说一点,if语句可以根据实际的需要进行嵌套,至于嵌套的层数没有限制。

条件本质

所有的java代码在执行的时候最后都会被程序最终都是一条条的指令,CPU有一个指令指示器,指向下一条要执行的指令,CPU根据指示器的指示加载指令并且执行。指令大部分是具体的操作和运算,在执行这些操作时,执行完一个操作后,指令指示器会自动指向挨着的下一个指令。

而有一种特殊的指令,称为跳转指令,这些指令会修改指令指示器的值,让CPU跳到一个指定的地方执行。跳转有两种,一种是条件跳转,另一种是无条件跳转。条件跳转检查某个条件,满足则进行跳转,无条件跳转则是直接进行跳转。条件分支流程在执行的时候,if, else实际上都会转换为这些跳转指令。

下节预告:switch选择结构,为什么switch后面的括号中只能够填如byte,int等类型?

我不能保证每一个地方都是对的,但是可以保证每一句话,每一行代码都是经过推敲和斟酌的。希望每一篇文章背后都是自己追求纯粹技术人生的态度。

永远相信美好的事情即将发生。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69298.html

相关文章

  • webpack系列-插件机制杂记

    摘要:系列文章系列第一篇基础杂记系列第二篇插件机制杂记系列第三篇流程杂记前言本身并不难,他所完成的各种复杂炫酷的功能都依赖于他的插件机制。的插件机制依赖于一个核心的库,。是什么是一个类似于的的库主要是控制钩子函数的发布与订阅。 系列文章 Webpack系列-第一篇基础杂记 Webpack系列-第二篇插件机制杂记 Webpack系列-第三篇流程杂记 前言 webpack本身并不难,他所完成...

    Neilyo 评论0 收藏0
  • JavaScript 杂记(一)

    摘要:基础简单基础数据类型值得注意的是的值是,表示一个空对象指针,没有指向任何对象。的值是,表示申明变量或对象的属性却未初始化。值是派生自的,所以对他们执行相等测试会返回。字符串单引号和双引号都可以用来表示字符串,只要前后一致即可。 目的 记忆总是会随着时间而淡化,学习了点什么,就记录下点什么。 做点什么,总比不做要好。 基础 简单(基础)数据类型 Number ...

    raise_yang 评论0 收藏0
  • Java杂记17—String全面解析

    摘要:所以也就是说在没有的基础上,执行代码会在串池中创建一个,也会在堆内存中再出来一个。不可变性的优点安全性字符串不可变安全性的考虑处于两个方面,数据安全和线程安全。 摘要: String基本特性,String源码,为什么String不可变? 前言 基于字符串String在java中的地位,关于String的常识性知识就不多做介绍了,我们先来看一段代码 public class Test {...

    jeffrey_up 评论0 收藏0
  • 笃行杂记Zookeeper SessionTimeOut分析

    摘要:前言本文为笃行日常工作记录,烂笔头系列。最终通过分析源码了解到最终的确定是一个协商的过程,而不是简单的配置生效。根据客户端上报的和服务端自身的。如果上报的小于则设置为如果上报的大于则设置为如果介于两则之间,则以上报的时间为准。 0.前言 本文为笃行日常工作记录,烂笔头系列。 源码前面,了无秘密 — by 侯杰 近期的一个C++项目里使用了Zookeeper做服务发现,期间遇到了Sess...

    mcterry 评论0 收藏0
  • React-事件机制杂记

    摘要:前提最近通过阅读官方文档的事件模块,有了一些思考和收获,在这里记录一下调用方法时需要手动绑定先从一段官方代码看起代码中的注释提到了一句话的绑定是必须的,其实这一块是比较容易理解的,因为这并不是的一个特殊点,而是这门语言的特性。 前提 最近通过阅读React官方文档的事件模块,有了一些思考和收获,在这里记录一下~ 调用方法时需要手动绑定this 先从一段官方代码看起: showImg(...

    zhangyucha0 评论0 收藏0

发表评论

0条评论

jackzou

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<