3.5 选择与循环语句

3.5 选择与循环语句

3.5.1 程序的结构

一般来说程序的结构有顺序结构、选择结构和循环结构三种,这三种结构有一个共同点,就是它们都只有一个入口,也只有一个出口。单一入出口可以让程序易读、好维护,也可以减少调试时间。

1. 顺序结构

程序由上至下逐行执行,一条语句执行完之后继续执行下一句,一直到程序末尾。

2. 选择结构

根据条件的成立与否决定要执行哪些语句。流程图如图所示: 

 

 3. 循环结构

根据判断条件的成立与否决定程序段落的执行次数,程序段落称为循环主体。

 

3.5.2 选择结构

1. if语句

if语句格式:

if(判断条件){

      主体;

}

若是主体中的语句只有一个,则可省略大括号。

流程图如下:

 

2. if···else语

适合于程序中存在大量分支的判断语句。

if···else语句格式:

if(判断条件){

       主体1;

} else{

      主体2;

}

若在if语句或else语句主体中的语句只有一个,可以将大括号省去。

流程图如下:

 3. 三目运算符

等价于if···else

三目运算符
三目运算符意义
?:根据条件的成立与否来决定结果为:前面还是后面的表达式

?:语句格式:

变量=条件判断?表达式1:表达式2

三目运算符比if···else更简洁,执行速度更快。

 4. if···else if···else语句

在if···else中判断多个条件时用到

if···else if···else语句格式:

if(条件判断1){

      主体1;

}else if{

      主体2;

}

······        //多个else if语句

else{

      主体3;

}

 5. switch语句

switch语句将多选一的情况简化,使程序简洁易懂。if···else容易配对混淆,造成阅读上及运行上的错误,switch可以避免。

switch语句格式:

switch(表达式){

        case 选择值 1:语句主体1

                                  break; 

       case 选择值 2:语句主体2

                                  break;

       ·······  

       case 选择值 n:语句主体n

                                  break;

       default:            语句主体;

}

switch中选择值只能是字符或常量。JDK1.5之后,也支持枚举的判断。

执行流程:

1.先计算括号中表达式的结果,结果是数字、字符或枚举

2.根据结果检测是否符合case后面的选择值,若所有case的选择值都不符合,则执行default,执行完毕即结束switch

3.如果结果符合某个case,则执行该case包含的语句,一直遇到break才结束switch

4.若是没有在case语句结尾处加上break,则会一直执行到switch结尾才结束  break是跳出语句

5.若是没有定义default,则什么也不执行,直接退出switch

流程图如下所示:

break语句的作用:

如果不加break,则switch语句会从第一个满足条件的case开始依次执行操作,直到最后一个条件执行完毕才会退出switch

 

3.5.3 循环结构

1. while循环

while是循环语句,也是条件判断语句。当事先不知道循环多少次时,就用到while

while语句格式:

while(循环条件判断){

           语句1;

           语句2;

           ······

           语句n;

           循环条件更改;

}

当主体只有一个语句时,可以省略大括号。在while循环语句中只有一个判断条件,它可以是任何表达式。为真循环执行,再重复测试判断条件,执行主体,直到条件为假,才跳离循环

执行流程:

1.第一次进入while循环前,必须先为循环控制变量(或表达式)赋起始值

2.根据判断条件的内容决定是否要继续执行循环

3.执行完主体后,重新为循环控制变量(或表达式)赋值(增加或减少),由设计者实现,完成后回到步骤2重新判断是否继续执行循环

如果程序中没有修改循环条件,那么程序就会出现“死循环”。出现死循环要直接结束程序(在命令行方式下,CTRL+C结束程序)

 2. do···while循环

该循环也是用于未知循环执行次数的情况,与while循环最大的区别是在测试前都会执行一次循环体。

do···while语句格式:

do{

     语句1;

     ·······

     语句n;

     循环条件改变;

}while(循环条件判断);

当主体只有一个语句时,可以省略大括号

执行流程:

1.进入循环前,要先为循环控制变量(或表达式)赋起始值

2.直接执行循环主体,执行完毕才根据条件判断是否继续执行

3.执行完循环主体后,重新为循环控制变量(或表达式)赋值(增加或减少),需要编程人员自己实现,然后再回到2重新判断是否继续执行循环

 

 3.for循环

如果已经明确知道了循环次数,使用for循环

for语句格式:

for(赋初始值;判断条件;赋值增减量){

           语句1;

           ········

           语句n;

}

若是循环主体只含一条语句,可省略大括号

执行流程:

1.第一次进入for循环时,要为循环控制变量赋起始值

2.根据判断条件检查是否要继续执行循环

3.执行完循环后,控制变量会根据增减量的要求更改循环控制变量的值,然后回到2重新判断是否继续执行循环

 

 4. 循环的嵌套

多个循环是可以嵌套的。

打印九九乘法表:

package com;

public class ForNestedDemo {
    public static void main(String[] args) {
        for (int i = 1; i <=9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(i+"*"+j+"="+i*j+"\t");
            }
            System.out.print("\n");
        }
    }
}
1*1=1	
2*1=2	2*2=4	
3*1=3	3*2=6	3*3=9	
4*1=4	4*2=8	4*3=12	4*4=16	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25	
6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36	
7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49	
8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64	
9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81	

Process finished with exit code 0

说明:

1.i为外层循环的循环控制变量,j为内层循环的循环控制变量

2.当i为1时,符合外层for循环的判断条件(i<=9),进入内层for循环主体。此时j的初值为1,符合内层for循环的判断条件(j<=i),输出i*j的值(1*1=1)。如果j的值加一后仍符合判断条件,则再次执行内层主体,直到j的值大于i时,离开内层循环,回到外层循环。此时,i的值加一为2,符合外层for循环的判断条件,继续执行内层for循环,直到i的值大于9时离开嵌套循环

 3.5.4 循环的中断

Java中,可以使用如beak、continue等中断语句。站在结构化程序设计的角度上,并不鼓励用户使用中断语句,因为中断语句会增加调试及阅读的难度。

 1. break语句

break语句强迫程序中断循环。当程序执行到break时,会离开循环,继续执行循环外层的下一个语句。如果break语句出现在嵌套循环的内层循环,则break只会跳出当前层的循环。

break格式:

for(初值赋值;判断条件;设增减量){

          语句1;

          ·······

          break;

          ·······             //若执行break语句,则此块的语句不会被执行

          语句n;

}

········                    //跳出循环后,继续执行此块语句

package com;

public class BreakDemo {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {          //使用for循环
            if(i==3){                           //如果i的值为3,则退出整个循环
                break;                          //退出整个循环
            }
            System.out.println("i="+i);         //打印信息
        }
    }
}
i=0
i=1
i=2

Process finished with exit code 0

 

 2. continue语句

continue语句强迫程序跳到循环的起始处。当程序运行到continue时,会停止运行剩余的循环主体,而是回到循环的开始处继续执行。

continue格式:

for(初值赋值;判断条件;设增减量){

         语句1;

         ·······

        continue;

        ·······                //若执行continue语句,则此处将不会被执行

        语句n;

}

package com;

public class BreakDemo {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {          //使用for循环
            if(i==3){                           //如果i的值为3,则退出整个循环
                continue;                          //退出整个循环
            }
            System.out.println("i="+i);         //打印信息
        }
    }
}
i=0
i=1
i=2
i=4
i=5
i=6
i=7
i=8
i=9

Process finished with exit code 0

i=3时,遇到continue没有继续向下执行,因此没有输出

局部变量:循环语句中定义的变量属于局部变量,指此变量只能在循环语句中使用,而在循环外的语句无法使用

eg:for中的i

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值