前期提要:在上期文章中,我们学习了Java中同时也是各大语言中的流程控制语句。今天我们讲一下这些语句在Java中具体代码的使用。
顺序结构就是一个程序的基础运行流程,在代码上显示为从上往下一次运行编写的代码,不需要添加别的关键字。这也是最简单的流程结构。
(1)第一种类型:
格式如下:
if(关系表达式){ 语句体; }执行流程图如下: 1. 首先计算关系表达式的值(会用到我们之前讲到的逻辑运算符)。 2. 如果关系表达式的值为true就执行语句体。 3. 如果关系表达式的值为false就不执行语句体。 4. 继续执行后面的语句。
(2)第二种类型: 格式:
if(关系表达式){ 语句体1; }else{ 语句体2; }与第一种类型没有太大差别,仅多了一个else,代表在关系表达式为false时执行else中的语句体;
流程图如下: (3)第三种类型: 格式:
if(条件表达式1){ 语句体1; }else if(条件表达式2){ 语句体2; }else if(条件表达式3){ 语句体3; } ... else{ 语句体n+1; }流程图如下:
猛一看图可能感觉很复杂,其实本质上就是同时执行多个if,只要满足某一个的条件,就执行该if中的语句体。
switch…case分支语句,也被称为多路分支语句。
switch本身的含义是开关。在Java中switch…case语句很像生活中的开关,按不同的开关按钮,有不同的效果。
格式:
switch(表达式){ case 值1: 语句体1; break; case 值2: 语句体2; break; case 值3: 语句体3; break; ... default: 语句体n+1; break; }然后我们通过如下的流程图就可以很轻松的理解它的意思: 使用switch-case时需要注意以下几点:
计算switch表达式的值。注意:与if语句不同,不在是true和false,而是数值、字符、字符串等。表达式的值与某case的值一样时,执行对应case中的语句体。break用于结束switch语句,继续执行switch语句后面的代码。如果没有任何一个case的值和表达式的值一致,执行default对应的语句体。default表示其他情况,即除了罗列的case之外的所有情况。有的同学可能也发现了,在switch-case里面,出现了一个新的关键字——break;
break关键字有2个用途:
用于switch…case语句中的case语句块里,作用是结束switch的执行。用于循环结构,结束循环。—循环的时候讲。case中也可以不写break,不写break的话,switch不会结束执行,而是顺序往下执行代码,直到遇到break结束switch语句(或者顺序执行完整个switch…case语句)。
除非特殊需求需要省去break,否则每个case都要写上break。
下面我放几个栗子在这里,大家可以抽空联系一下,加深印象。
1.需求:输入2个整数,分别用变量a和b接收数据,输出a和b中的最大值。—不使用三目运算符。 2.需求:输入一个整数,判断是正数、负数还是0。如果输入的数大于0,输出"您输入的是一个正数",如果输入的数小于0,输出"您输入的是一个负数",否则输出"您输入的是0"。 3.需求:输入一个1~7之间的整数(含1和7),如果输入的是1,就输出"今天是星期一",如果输入的是2,就输出"今天是星期二",…,如果输入的是7,就输出"今天是星期天"。如果输入的是其他数字,就输出"输入的数字非法"。(使用switch…case来实现。)
循环结构是三大流程控制结构的最后一种,相比于顺序结构和分支结构,循环结构略复杂一些。
前面文章中我应该说过,循环结构的特点是能够重复的执行某些代码。
所以通过这两种特征,我们可以明白循环语句的几个重要标准:
循环的初始状态:即循环的起始状态,简单说就是循环开始的时候什么样?
循环条件:循环体反复执行的判断条件。简单说就是判断循环是否能一直执行下去。
循环控制语句:循环执行中每次变化的内容,简单说就是控制循环是否执行下去
我们小时候可能听过这样一个故事:高斯小时候,它的数学老师让他算1-100的和。高斯用了等差数列的计算方法,方便了它的计算。但我们计算机不一样,它可以无脑加下去,但就算这样,我们肯定也不能1,2,3,4…这样一个一个输入加进去。这个时候就需要用到我们的循环结构了。
所以,循环结构特别适合解决这种大规模计算或执行代码雷同的场景。
Java中一共提供了3种实现循环的语法,分别是:
for循环while循环do…while循环接下来我们来看一下他们各自的用法:
for循环是Java中最常用的循环。适用于知道循环次数的场景。
格式:
for(表达式1;表达式2;表达式3){ 循环体; }流程图: 大致解释一下这个图:
首先执行表达式1,表达式1通常写循环的初始化内容,即循环的初始状态。表达式1只会执行一次。判断表达式2的真假。表达式2是循环的判断条件,表达式2的值为true,执行循环体,如果表达式2的值为false,则结束循环,执行循环之外的代码。循环体执行完毕之后,执行表达式3。表达式3是循环的控制条件,这个条件可以影响循环的次数。表达式3执行完毕之后,回到步骤2继续判断。表达式2的结果为false时,循环会结束。
最常见也是最简单的for循环,就是像下面这样:
public static void main(String[] args) { //需求:通过for循环打印10遍"Hello World" //分析: // 1.由题意可知循环次数是10次。 // 2.循环体是 打印 Hello World for(int i = 0; i < 10; i++) { System.out.println("Hello World"); } }while是Java中第二常用的循环。while循环能实现for循环全部的功能,即:while循环可以替代for循环。除此以外,while循环还适用于不知道具体循环次数的循环(只知道循环结束条件,但不清楚循环多少次结束。)。
while循环最大的特点:适用于不知道循环次数的循环。
在开发中,如果知道循环次数,往往使用for循环(因为for循环的格式比较简洁,书写比较方便),只有不知道循环次数的时候,才使用while循环。
有不懂的地方不急,我们继续往下看:
格式:
while(条件表达式){ 语句体; }流程图: 执行方法如下:
计算条件表达式的值。如果条件表达式的值为true,执行循环体。执行完循环体以后,回到步骤1。如果条件表达式的值为false,结束循环的执行。把上文for循环的示例改成while循环得到的代码如下:
//需求:通过while循环打印10遍"Hello World" //分析: //1.循环体是 打印"Hello World" //2.循环结束的条件是打印10遍"Hello World" //---因此需要有一个计数器(变量),帮我们记录打印了几次(每打印一次,count就自增1) //---循环执行的条件:计数器不够十次。 int count = 0; while(count < 10) { System.out.println("Hello World"); count++;//每打印一次,count就自增1 } }通过上述种种示例,不难发现while确实可以替代for循环。而且可以发现for循环中的表达式1,表达式2,表达式3以及循环体,在while循环中都有出现。
for循环的表达式1对应的是while循环之前的循环初始条件。
for循环的表达式2对应的是while循环的条件表达式。
for循环的表达式3对应的是while循环中的 变量自增。
for循环的循环体对应的是while循环中除了变量自增之外的全部内容。
解决了上面两个循环结构之后,最后一个do-while相比来讲就简单很多了。
do…while是Java中第三种循环结构,是使用频率最低的循环结构。do…while循环能实现while循环全部的功能,do…while循环和while循环的唯一区别是,do…while循环会至少执行一次循环。
结构:
do{ 循环体; }while(表达式);我们可以看出do-while和while最大的区别就是,他会先执行一次再进行判断。也就是说,while可能一次循环体语句都不执行,而do-while的执行次数是大于等于1的。
本篇文章我们主要讲了Java中,分支结构和循环结构的基本写法。在下一篇文章中,我们将会对循环结构进行更加深入的学习,感谢大家的观看。
