JavaSE(4)_程序流程控制 if-else、for、while、do-while、Switch-case、Break-Continue-return、Scanner

目录

程序流程控概述

顺序结构

分支结构

 if-else使用说明

switch-case使用说明

用户输入值到控制台被程序获取Scanner 

循环结构

for循环

​编辑

while循环

do-while循环

for与while的区别

while和do-while循环的区别

嵌套循环

break、continue、return的使用

break语句用于终止某个语句块的执行

break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块

continue的使用

return

break、continue特殊流程说明:


程序流程控概述

流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。

其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:

  • 顺序结构
  • 分支结构
  • 循环结构

顺序结构

程序从上到下逐行地执行,中间没有任何判断和跳转。

分支结构

根据条件选择要执行的某段代码,有if-else和switch-case

 if-else使用说明

  • 条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量;
  • 语句块只有一条执行语句时,一对{}可以省略,但建议保留;
  • if-else语句结构,根据需要可以嵌套使用;
  • 当if-else结构是“多选一”时,最后的else是可选的,根据需要可以省略;
  • 当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓当多个条件是“包含”关系时,“小上大下/ 子上父下”。例如判断成绩来分等级时,如果布尔表达式是用大于号时,那么条件也要从大到小往下面写,如果布尔表达式是小于号时,条件由小到大往下写,下面RunningOrder1会演示
package javase4;

public class RunningOrder1 {
/*
分支结构中的if-else(条件判断结构)
一、三种结构
第一种:
if(条件表达式){
	执行表达式
}
第二种:
if(条件表达式){
	执行表达式1
}else{
	执行表达式2
}
第三种:
if(条件表达式){
	执行表达式1
}else if{
	执行表达式2
}else if(条件表达式){
	执行表达式3
}
...
else{
	执行表达式n
}

*/

    public static void main(String[] args) {
        //if、if-else、if-else if
        int heartBeats = 75;

        if(heartBeats==75) System.out.println("心跳为75");//执行该代码

        if(heartBeats < 60 || heartBeats >100){
            System.out.println("心跳不正常");//执行该代码
        }else{
            System.out.println("心跳正常");
        }

        if(heartBeats>100){
            System.out.println("心跳过快");
        }else if(heartBeats>=60){
            System.out.println("心跳正常");//执行该代码
        }else{
            System.out.println("心动过缓");
        }
    }
}

switch-case使用说明

  • switch结构中的表达式,只能是如下的六种数据类型之一:byteshortcharint枚举类型(JDK5.0)、String类型(JDK7.0)

  • 不能是:long,float,double,boolean

package javase4;

public class RunningOrder2 {
    /*
        分支结构之二:switch-case

                1.格式
    switch(表达式){
            case 常量1:
                执行语句1;
                //break;
            case 常量2:
                执行语句2;
                //break;

    ...

            default:
                执行语句n:
                //break;
        }

    2.说明:
                ① 根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,进入相应case结构中,执行相关语句。
        当调用完执行语句后,则仍然继续向下执行其他case语句,直到遇到break关键字或末尾结束为止。

                ② break, 可以使用switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构。

                ③ switch结构中的表达式,只能是如下的六种数据类型之一:byte、short、char、int、枚举类型(JDK5.0)、String类型(JDK7.0)
    ④ case 之后之能声明常量。不能声明范围。

                ⑤ break关键字是可选的,根据业务需求设置
                ⑥ default:相当于if-else结构中的else。
        default 结构是可选的,而且位置是灵活的。
    */
    public static void main(String[] args) {
        String name = "小明";
        switch(name){
            case "小明":
                System.out.println(name+"被选中了");
                break;
            case "小李":
                System.out.println(name+"被选中了");
                break;
            case "小张":
            case "小黑"://case这里可以用多个!!!!
                System.out.println(name+"被选中了");
                break;
            default:
                System.out.println("没人吧,没人就默认小红被选中");
                break;//这个break可写可不写,因为已经到了switch分支结构函数最后一行了
        }

        /*编译异常情况,只能使用'char, byte, short, int, Character, Byte, Short, Integer, String, or an enum'*/
        boolean isHandSome = true;
        switch(isHandSome){//编译异常,java: 不兼容的类型: boolean无法转换为int
            case true:
                System.out.println("可乐吗??");
                break;
            default:
                System.out.println("输入有误!!!");
        }

        double d1 = 0.1;
        switch(d1){//编译异常,java: 不兼容的类型: 从double转换到int可能会有损失
            case 0.1:
                System.out.println("可乐吗??");
                break;
            default:
                System.out.println("输入有误!!!");
        }

        /*编译异常,需要与表达式相同的类型并且是常量,而不是boolean类型和变量!!*/
        int age = 10;
        switch(age){
            case age > 18://编译异常,java: 不兼容的类型: boolean无法转换为int
                System.out.println("成年了");
                break;
            default:
                System.out.println("未成年");
        }
    }
}

用户输入值到控制台被程序获取Scanner 

package javase4;

import java.util.Scanner;

public class ScannnerTest {
/*
如何从键盘获取不同类型的变量,需要使用Scanner类

具体步骤:
1.导包:import java.util.Scanner;
2.Scanner的实例化;
3.调用Scanner类的相关方法,来获取指定的变量。
*/
    public static void main(String[] args) {
        //Scanner类实例化对象
        Scanner scanner = new Scanner(System.in);

        //请求控制台输入你的年龄
        System.out.println("请输入你的年龄");
        int age = scanner.nextInt();

        //请求控制台输入你的名字
        System.out.println("请输入你的名字");
        String name =scanner.next();

        //请求控制台输入你的体重,以kg为单位
        System.out.println("请输入你的体重,单位为kg");
        Double weight = scanner.nextDouble();

        //请求控制台输入你的婚姻状况
        System.out.println("是否已婚,输入true或者false");
        boolean getMarried = scanner.nextBoolean();

        System.out.println("你叫"+name+",今年都"+age+"岁了.体重是"+weight+"kg,婚姻状况"+getMarried);

        //Scanner类没有提供char类型的next方法,可以通过下标方式获取,后面学习数组和String时会接触到
        System.out.println("请输入一个字符");
        String getChar = scanner.next();
        char c1 = getChar.charAt(0);
        System.out.println("char的值为:"+c1);
    }
}

循环结构

  • 根据循环条件重复执行代码,有while、do-while、for这三种循环语句。并且在jdk1.5以后提供了foreach方便遍历集合和数组元素
  • 在某些条件满足的情况下,反复执行特定代码的功能
  • 循环语句分类
    • for 循环
    • while 循环
    • do-while 循环

for循环

语法格式
for(⑴初始化部分;⑵循环条件部分;⑷迭代部分){
            ⑶循环体部分;
}


执行过程:⑴-⑵-⑶-⑷-⑵-⑶-⑷-⑵-⑶-⑷-......-⑵,参考下图


说明:
②循环条件部分为boolean类型表达式,当值为false时,退出循环
①初始化部分可以声明多个变量,但必须是同一个类型,用逗号分隔,例如int a=1,b=2;
④可以有多个变量更新,用逗号分隔,例如a++,b++

package javase4;

public class RunningOrder3 {
    /*
    For循环结构的使用
    一、循环结构的四个要素
    ① 初始化条件
    ② 循环条件
    ③ 循环体
    ④ 迭代条件

    二、for循环的结构
    for(①;②;④){
        ③
    }
    */
    public static void main(String[] args) {
        //循环体执行五次,通过初始值和循环条件判断
        for (int i = 0; i < 5; i++) {
            System.out.println("打印了"+(i+1)+"次");//打印五次语句
        }

        //测试for循环执行顺序,一共循环3次
        int num = 1;
        for(System.out.print('a');num <= 3;System.out.print('c'),num++){
            System.out.print('b');//abcbcbc
        }
        System.out.println();

        /*拓展练习*/
        //获取[0~100]的偶数和
        int sum1 = 0;
        for (int i = 0; i <=100 ; i++) {
            if (i%2==0)sum1+=i;
        }
        System.out.println("0~100的偶数和为"+sum1);//0~100的偶数和为2550
        
        
    }
}

while循环

语法格式
⑴初始化部分
while(⑵循环条件部分){
    ⑶循环体部分;
    ⑷迭代部分;
}

执行过程:①-②-③-④-②-③-④-②-③-④-…-②

注意事项:

  • 注意不要忘记声明④迭代部分。否则,循环将不能结束,变成死循环。
  • for循环和while循环可以相互转换。
package javase4;

public class RunningOrder4 {
    public static void main(String[] args) {
        //使用while循环做出[0~100]的整数和
        int result = 0;
        int i = 0;
        while(i<=100){
            result += i;
            i++;//迭代部分,必须设置否则就会进入死循环
        }
        System.out.println("[0~100]的整数和为:"+result);//[0~100]的整数和为:5050
    }
}

do-while循环

do-while循环结构的使用
一、循环结构的四个要素
⑴ 初始化条件
⑵ 循环条件 --->是boolean类型
⑶ 循环体
⑷ 迭代条件

二、do-while循环的结构
⑴
do{
	⑶;
	⑷;
}while(⑵);

执行过程:⑴ -  ⑶- ⑷ - ⑵ -  ⑴- ⑶ -  ⑷- ... - ⑵
 
说明:do-while循环至少执行一次循环体。
package javase4;

import java.util.Scanner;

public class RunningOrder5 {
    public static void main(String[] args) {
        //使用do-while遍历[0,100]所有偶数
        int sum = 0;
        int i = 0;
        do{
            if(i%2==0) sum+=i;
            i++;
        }while(i<=100);
        System.out.println("[0,100]偶数和为"+sum);//[0,100]偶数和为2550

        /*拓展练习*/
        //(写法1,这个兼容性更强)从键盘读入个数不确定的数,并判断读入的正数和负数的个数,输入为0时结束程序
        double input = 0;
        int countPositive = 0;
        int countNegative = 0;
        do{
            System.out.println("请输入一个数:");
            input=new Scanner(System.in).nextDouble();
            if(input>0)countPositive+=1;
            if(input<0)countNegative+=1;
        }while(input!=0);
        System.out.println("循环结束,正数有"+countPositive+"个,负数有"+countNegative+"个.");

        //(写法2)从键盘读入个数不确定的数,并判断读入的正数和负数的个数,输入为0时结束程序
        Scanner scan = new Scanner(System.in);
        int Positive = 0;	//正数个数
        int Negative = 0;	//负数个数
        while(true){
            int number = scan.nextInt();
            if(number > 0){
                Positive++;
            }else if(number < 0){
                Negative++;
            }else{
                //一旦执行,跳出循环。
                break;
            }
        }
        System.out.println("循环结束,正数有"+Positive+"个,负数有"+Negative+"个.");
    }
}

for与while的区别

当知道具体要循环多少次时使用for循环,举例:计算[0~100]的偶数

当不清楚要循环多少次时使用while或者do-while循环,举例:让用户输入值,判断输入的值的正负,来统计正数和负数的个数

while和do-while循环的区别

do-while是先做后循环,也就是无论如何都要至少执行一次循环体的代码

嵌套循环

说明:

  • 将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while均可以作为外层循环或内层循环。
  • 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。外层循环控制行数,内层循环控制列数.也可以看做外层循环为局,内层循环为回合.
  • 设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。

典型题目:

  • 九九乘法表
  • 金字塔
  • 100以内的质数
package javase4;

public class RunningOrder6 {
/*
嵌套循环的使用
1.嵌套循环:将一个循环结构A声明在另一个循环结构B的循环体中,就构成了嵌套循环

2.
外层循环:循环结构B
内层循环:循环结构A
3.说明
① 内层循环遍历一遍,只相当于外层循环循环体执行了一次
② 假设外层循环需要执行m次,内层循环需要执行n次。此时内层循环的循环体一共执行了m * n次

4.技巧!!!!!!!!!!!
外层循环控制行数,内层循环控制列数
*/

    public static void main(String[] args) {
        //打印一个3*3的左直角三角形
        for (int i = 1; i <= 3; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print('*');
            }
            System.out.println();
        }
//        *
//        **
//        ***

        //九九乘法表,逻辑与上同理
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "*" + i + "=" + j * i + '\t');
            }
            System.out.println();
        }

        //[0,100]的所有质数及个数(素数:只能被1和本身整数的自然数)
        int countPrime = 0;
        boolean flag = true;
        for (int i = 2; i <= 100; i++) {//[0,100]的自然数,从2开始
            for (int j = 2; j < i; j++) {//从0~100取出的数与其相比的数从小到大开始求余
                if (i % j == 0) {//一旦发现有数能被整除
                    flag = false;//更改操作为不允许
                    break;//立马终止内侧循环
                }
            }
            if (flag == true) {//如果允许操作,也就以为着这个i值只能别自己和1整除
                countPrime += 1;//质数整数+1
                System.out.println("第" + countPrime + "个质数为:" + i);
            }
            flag = true;//将操作重新改为允许,开始下一次外部循环
        }
        System.out.println("[0,100]的所有质数个数是:" + countPrime);//[0,100]的所有质数个数是:25
    }
}

break、continue、return的使用

break语句用于终止某个语句块的执行

{    
	......
	break;
	......
}

break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块

label1:	{	......
label2:		{	......
label3:			{	......
					break label2;
					......
				}
			}
		}

continue的使用

  • 只在循环结构中使用
  • 中止continue执行所在的循环的一次循环,若后面还能执行循环则继续
  • continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环

label1:	{	......
label2:		{	......
label3:			{	......
					continue label2;
					......
				}
			}
		}

return

  • return:并非专门用于结束循环的,它的功能是结束一个方法。当一个方法执行到一个return语句时,这个方法将被结束。
  • 与break和continue不同的是,return直接结束整个方法,不管这个return处于多少层循环之内
  • 如果有返回值则返回调用这个方法的对象,返回调用该方法的语句处进行下一步执行

break、continue特殊流程说明:

  • break只能用于switch语句和循环语句中。
  • continue 只能用于循环语句中。
  • 二者功能类似,但continue是终止本次循环,break是终止本层循环。
  • break、continue之后不能有其他的语句,因为程序永远不会执行其后的语句。
  • 标号语句必须紧接在循环的头部。标号语句不能用在非循环语句的前面。
  • 很多语言都有goto语句,goto语句可以随意将控制转移到程序中的任意一条语句上,然后执行它。但使程序容易出错。Java中的breakcontinue是不同于goto的且goto在Java中属于保留字
package javase4;

public class RunningOrder7 {
/*
break和countinue关键字的使用
				使用范围			循环中使用的作用(不同点)	相同点
break:			switch-case			结束当前循环				关键字后面不能声明执行语句
				循环结构中


countinue:		循环结构中			结束当次循环				关键字后面不能声明执行语句

*/
    public static void main(String[] args) {
        for(int i = 1;i <= 10;i++){
            if(i % 4 == 0){
                //	break;	//1、2、3
                continue;	//1、2、3、5、6、7、9、10
                //	System.out.println("该吃饭了!!!");
            }
            //	System.out.println(i);
        }
        //********************************
        for(int i = 1;i <= 4;i++){

            for(int j = 1;j <= 10; j++){
                if(i % 4 == 0){
                    //		break;	//默认跳出包裹此关键字最近的一层的循环
                    continue;
                }
                System.out.print(j);
            }
            System.out.println();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值