新手小白Java学习2——流程控制语句

流程控制语句

1.概述

在一个程序执行的过程中,各条语句的执行顺序对程序对的结果是有直接影响的,所以我们必须清楚每条语句的执行流程。流程控制语句就可以控制代码的置信顺序。

分类:

  • 顺序结构
  • 选择(分支)结构
  • 循环结构

2.循环结构

是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序一次执行。

流程图:

在这里插入图片描述

3.选择结构

3.1概述

  • 选择结构也称之为分支结构
  • 选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
  • Java语言提供了两种分支结构的语句
    • if语句
    • switch语句

3.2if语句

if语句分为三种格式

3.2.1格式一
if(布尔表达式){
	语句体;
}
  • 执行流程
    • 首先判断布尔表达式的结果是true还是false
    • 如果是true就执行语句体
    • 如果是false就不执行语句体
  • 流程图

在这里插入图片描述

  • 注意:当if语句中只有一行代码时,{}可以省略
public static void main(String[] args) {
        System.out.println("晚上没事出去溜达");
        System.out.println("发现一个网吧");
        System.out.println("请输入您的年龄");
        Scanner scanner = new Scanner(System.in);
        int age = scanner.nextInt();
        if (age >= 18) {
            System.out.println("开机");
            System.out.println("上号");
            System.out.println("骂人");
            System.out.println("挂机");
            System.out.println("下机");
        }

        System.out.println("回家睡觉");
    }
3.2.2格式二

格式:

if(布尔表达式){
	语句体1;
}else{
	语句体2;
}
  • 执行流程
    • 首先判断布尔表达式的结果是true还是false
    • 如果是true就执行语句体1
    • 如果是false就执行语句体2
  • 流程图

在这里插入图片描述

public static void main(String[] args) {
        // 判断一个数字是偶数还是奇数
        System.out.println("请输入一个整数");
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        if (num % 2 == 0){
            System.out.println(num + "是偶数");
        }else {
            System.out.println(num + "是奇数");
        }
    }
3.2.3格式三
if (布尔表达式1){
	语句体1;
}else if (布尔表达式2){
	语句体2;
}else if (布尔表达式3){
	语句体3;
}...
else if (布尔表达式n){
	语句体n;
}else{
	语句体n+1;
}
  • 执行流程
    • 首先判断布尔表达式的结果是true还是false
    • 如果是true就执行语句体1
    • 如果是false就判断布尔表达式2
    • 如果布尔表达式2的结果是true,就执行语句体2
    • 如果布尔表达式2的结果是false,就判断布尔表达式3
    • 如果布尔表达式n的结果是true,就执行语句n
    • 如果布尔表达式n的结果是false,就执行语句体n+1
  • 流程图

在这里插入图片描述

public static void main(String[] args) {
        System.out.println("请输入您的年龄");
        Scanner scanner = new Scanner(System.in);
        int age = scanner.nextInt();
        // 根据年龄输出对应的人生阶段
        if (age >= 0 && age < 1){
            System.out.println("婴儿");
        }else if (age >= 1 && age < 7){
            System.out.println("幼儿");
        }else if (age >= 7 && age < 12){
            System.out.println("儿童");
        }else if (age >= 12 && age < 18){
            System.out.println("少年");
        }else if (age >= 18 && age < 30){
            System.out.println("青年");
        }else if (age >= 30 && age < 60){
            System.out.println("中年");
        }else if (age >= 60 && age < 120){
            System.out.println("老年");
        }else {
            System.out.println("老登");
        }
    }
课堂练习
1:x和y满足如下:

x >= 3      y = 2x

-5< x < 3    y = 2x + 1

x <= -5      y = 2x - 1

输入x的值,计算出y的值并输出
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个数x:");
        double  num = scanner.nextDouble();
        double  result=0;
        if(num>=3)
            result = 2*num;
        else if(num>-5&&num<3)
            result =2*num+1;
        else
            result =2*num-1;
        System.out.println("y的值为:"+result);
2:用户输入对应的月份,输出对应的季节

3  4  5 春天

6  7  8  夏天

9  10  11 秋天

12  1  2 冬天
        Scanner scanner = new Scanner(System.in);
 		System.out.println("请输入当前的月份:");
        int month = scanner.nextInt();
        if (month >= 3 && month <= 5)
            System.out.println("当前是春天!");
        else if (month >= 6 && month <= 8)
            System.out.println("当前是夏天!");
        else if (month >= 9 && month <= 11)
            System.out.println("当前是秋天!");
        else
            System.out.println("当前是冬天")

3.3 switch语句

  • 格式
switch(表达式){
	case 目标值1:
		语句体1;
		break;
	case 目标值2:
		语句体2;
		break;
	case 目标值3:
		语句体3;
		break;
		...
	case 目标值n:
		语句体n;
		break;
	default:
		语句体n+1;
		break;
}
  • 格式解释
    • switch表示这是switch语句
    • 表达式取值类型:byte、short、int、char
    • JDK5之后可以是枚举
    • JDK7之后可以是String
    • case后面跟的是要和表达式比较的值
    • 语句体就是一条或者多条语句
    • break表示中断、结束的意思。可以立即结束switch语句
    • default语句表示所有情况都不匹配的时候,就执行该处内容
  • 执行流程
    • 首先计算出表达式的值
    • 然后case一次进行比较,一但有对应的值,就会执行相应的语句。在执行的过程中,遇到break就会结束
    • 如果所有的case都和表达式不匹配,就会执行default语句体的部分的内容
  • 注意点:
    • default的break如果在代码的最后,就可以省略
    • switch中的语句,顺序不影响最终的结果
    • case和default具有穿透效果,如果没有break的影响,那么就会一直向下执行
public static void main(String[] args) {
        // 根据用户输入的值1,2,3...7 输出对应的周几
        Scanner scanner = new Scanner(System.in);
        int weekDay = scanner.nextInt();
        switch (weekDay) {
            default:
                System.out.println("输入有误");
            case 1:
                System.out.println("周一最辛苦");
            case 5:
                System.out.println("这天最开心");
            case 2:
                System.out.println("周二最普通");
                break;
            case 3:
                System.out.println("周三坚持一半");
                break;
            case 7:
                System.out.println("洗衣服准备上班");
                break;
            case 4:
                System.out.println("周四吃饺子");
                break;
            case 6:
                System.out.println("轻松玩一天");
                break;
        }
课堂练习:

用户输入对应的月份,输出对应的季节,使用switch语句编写

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int month = scanner.nextInt();
        switch (month){
            case 3:
            case 4:
            case 5:
                System.out.println("春天");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println("夏天");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println("秋天");
                break;
            case 12:
            case 1:
            case 2:
                System.out.println("冬天");
                break;
            default:
                System.out.println("输入有误");
                break;
        }
    }
public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int month = scanner.nextInt();
        switch (month){
            case 3, 4, 5:
                System.out.println("春天");
                break;
            case 6 ,7 ,8:
                System.out.println("夏天");
                break;
            case 9,10,11:
                System.out.println("秋天");
                break;
            case 12,1,2:
                System.out.println("冬天");
                break;
            default:
                System.out.println("输入有误");
                break;
        }
    }
JDK17特性
public static void main(String[] args) {
        // 输入对应的城市名,获取对应的省份
        Scanner scanner = new Scanner(System.in);
        String cityName =scanner.next();

        // 如果case中只有一行代码,可以不写{} 如果有多行代码需要写上{}
        // 并且值需要使用关键字yield修饰
        String provinceName = switch (cityName){
            case "郑州","洛阳","开封" -> {
                System.out.println("老家河南");
                System.out.println("可以润两次");
                yield  "河南省";
            }
            case "成都","绵阳" -> "四川省";
            default ->"山东省";
        };
        System.out.println(provinceName);
    }

4循环结构

4.1概述

循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段重复执行的代码称之为循环体语句。

4.2循环语句的组成

  • 初始化表达式
    • 一条或者多条语句,这些语句完成初始化操作
  • 布尔表达式
    • 如果是true就继续循环,如果是false就结束循环
  • 循环体语句
    • 就是需要重复执行的代码
  • 步进表达式
    • 再一次循环结束后,下一次循环判断条件执行前执行。通过控制循环条件中的变量,使得循环在合适的时候结束。

4.3 for循环

  • 格式
for (初始化表达式1;布尔表达式2;步进表达式4){
	循环体语句3
}
  • 执行流程
    • 执行顺序1 2 3 4 2 3 4 2 3 4…2不满足为止
  • 流程图

在这里插入图片描述

public static void main(String[] args) {
        // 循环100次HelloWorld
//        for (int i = 1;i <= 100;++i){
//            System.out.println("HelloWorld" + i);
//        }
//
//        // 打印5 - 1
//        for (int i = 5;i >= 1;i--){
//            System.out.println(i);
//        }

        // 求1-100之间的偶数和
        // 定义变量代表和
//        int sum = 0;
//        for (int i = 1;i <= 100;i++){
//            // 判断i是否是偶数
//            if (i % 2 == 0){
//                sum += i;
//            }
//        }
//        System.out.println("1-100的偶数和是" + sum);
//        int sum = 0;
//        for (int i = 2;i <= 100;i += 2){
//            sum += i;
//        }
//        System.out.println("1-100的偶数和是" + sum);

        // 统计所有的"水仙花数"有多少个
        // "水仙花数"是一个三位数,其中个位的立方 + 十位的立方 + 百位的立方 = 自身
        // 153 = 3 * 3 * 3 + 5 * 5 * 5 + 1 = 27 + 125 + 1 = 153
        // 定义变量代表计数器
        int count = 0;
        for (int i = 100;i < 1000;i++){
            // 获取到所有的三位数
            // 获取个位
            int ge = i % 10;
            int shi = i / 10 % 10;
            int bai = i / 100;
            if (ge * ge * ge + shi * shi * shi + bai * bai * bai == i){
                count++;
            }
        }
        System.out.println("水仙花数有" + count + "个");
    }

4.4while循环

  • 基本格式
while(布尔表达式){
	循环体语句;
}
  • 扩展格式
初始化表达式1;
while (布尔表达式2){
	循环体语句3;
	步进表达式4;
}
  • 执行流程
    • 执行顺序1 2 3 4 2 3 4 2 3 4 …2不满足为止
  • 流程图

在这里插入图片描述

    public static void main(String[] args) {
//        for (int i = 1;i <= 100;i++){
//            System.out.println("HelloWorld");
//        }

        // 输出100次HelloWorld
//        int i = 1;
//        while (i <= 100){
//            System.out.println("HelloWorld");
//            i++;
//        }

        // 求1-100的和
//        int i = 1;
//        int sum = 0;
//        while (i <= 100){
//            sum += i;
//            i++;
//        }
//        System.out.println(sum);

        // 统计水仙花数有多少个
//        int i = 100;
//        // 定义计数器
//        int count = 0;
//        while (i < 1000){
//            // 获取到所有的三位数
//            // 获取个位十位和百位
//            int ge = i % 10;
//            int shi = i / 10 % 10;
//            int bai = i / 100;
//            if (ge * ge * ge + shi * shi * shi + bai * bai * bai == i){
//                count++;
//            }
//            i++;
//        }
//        System.out.println("水仙花数有" + count + "个");
        Scanner scanner = new Scanner(System.in);
        // 使用while循环   如果用户输入的是y 就继续循环  如果不是y就结束循环
        String str = "y";
        while ("y".equals(str)){
            System.out.println("是否要继续?y/n");
            str = scanner.next();
        }
    }

4.5 do while 循环

  • 基本格式
do{
    循环体语句;
}while(布尔表达式);
  • 扩展格式
初始化表达式1;
do{
	循环体语句3;
	步进表达式4;
}while(布尔表达式2);
  • 执行流程
    • 执行顺序1 3 4 2 3 4 2 3 4 …2不满足为止
  • 流程图

在这里插入图片描述

public static void main(String[] args) {
        // 打印100行HelloWorld
//        int i = 1;
//        do {
//            System.out.println("HelloWorld");
//            i++;
//        }while (i <= 100);
        // 使用dowhile实现是否继续功能
        Scanner scanner = new Scanner(System.in);
        String str;
        do {
            System.out.println("是否要继续?y/n");
            str = scanner.next();
        }while ("y".equals(str));
    }

4.6三种循环的区别

dowhile循环中的语句体至少会执行一次,for循环和while循环有可能不会执行

for循环中的变量出了循环就没有了,但是while和dowhile循环中的控制变量出了循环后还会存在

public static void main(String[] args) {
        for (int i = 1;i > 10;i++){
            System.out.println("HelloWorld");
        }
        
        int i = 1;
        do {
            System.out.println("HelloWOrld");
            i++;
        }while (i > 10);
        
    }

4.7跳转控制语句

  • 概述

让循环在某一步的时候结束或者跳过某些数据不要这些数据,就可以使用跳转控制语句

break 中断

continue 继续

  • break
    • 可以在switch语句中使用
    • 可以在循环语句中使用
  • continue
    • 可以在循环语句只能使用

循环是可以嵌套的,break和continue只会针对于离他们最近的循环

public class TestDemo14 {
    public static void main(String[] args) {
//        for (int i = 1;i <= 10;i++){
//            if (i == 3) {
//                break;// 会立即结束整个循环
//            }
//            System.out.println("记得穿秋裤");
//        }

//        for (int i = 1;i <= 10;i++){
//            if (i % 3 == 0){
//                continue;// 结束本次循环,继续下一次循环
//            }
//            System.out.println("第" + i + "层到了,请下楼梯");
//        }

        for (int i = 1;i <= 5;i++){
            System.out.println("i = " + i);
            for (int j = 1;j <= 5;j++){//循环的嵌套
                if (j == 2) break;
                System.out.println("j = " + j);
            }
        }
        
        for (int i = 1;i < 10;i++){
            while (true){
                do {
                    
                }while (true);
            }
        }
    }
}

4.8死循环

死循环也称之为永真循环,无限循环。循环条件永远都是true,循环不会停止

public static void main(String[] args) {
//        while (true){} 推荐
        for (;;){}
    }

课堂练习

  • 请输出1-100之间满足如下条件的数字

对3取余得2

对5取余得3

对7取余得2

Scanner scanner = new Scanner(System.in); 
 boolean logo = false;
        for (int i = 1; i <= 100; i++) {
            if ((i % 3 == 2) && (i % 5 == 3) && (i % 7 == 2)) {
                System.out.println("数字" + i + "符合");
                logo = true;
            }
        }
        if (logo == false)
            System.out.println("没有符合的数!");
  • 百钱买百鸡:3文钱可以买一只公鸡,2文钱可以买一只母鸡,1文钱可以买3只小鸡。用100文钱买100只鸡,那么可以有公鸡,母鸡,小鸡多少只?
Scanner scanner = new Scanner(System.in);int count=0;
        for(int i =0;i<=100/3;i++){
            for(int j =0;j<=100/2;j++){
                int k=100-i-j;
                if((i*3+j*2+k/3==100)&&(k%3==0)) {
                    System.out.println("公鸡有" + i + "只," + "母鸡有" + j + "只," + "小鸡有" + k + "只");
                    count++;
                }
            }
        }
        System.out.println("共有方法"+ count+"种");
    }
  • 打印九九乘法表
		for (int i = 1; i <= 9; i++) {// 行数
            for (int j = 1; j <= i; j++) {// 每行*的数量
                System.out.print(j + "x" + i + "=" + i * j + "\t");
            }
            System.out.println();
        }

课后作业

package smjava.homework1106;

import javax.annotation.processing.SupportedAnnotationTypes;
import java.util.Scanner;

public class HomeWork {
    public static void main(String[] args) {
        //1.现要求⽤户输⼊两个数a、b,如果a能被b整除或a加b⼤于1000,则输出a,否则输出b
        Scanner scanner = new Scanner(System.in);
       System.out.println("输入两个数:");
        int num1_1=scanner.nextInt();
        int num1_2=scanner.nextInt();
        if(num1_1%num1_2==0||num1_1+num1_2==1000)
            System.out.println(num1_1);
        else
            System.out.println(num1_2);

        // 2.动态录⼊3个数,请使⽤条件结构/三元运算符求3个数的最值
        System.out.println("请输入三个数:");
        double num2_1 = scanner.nextDouble();
        double num2_2 = scanner.nextDouble();
        double num2_3 = scanner.nextDouble();
        double max=(num2_1>num2_2)?num2_1:num2_2;
        if(max>num2_3)
            System.out.println("最大值为:"+max);
        else{
            max= num2_3;
            System.out.println("最大值为:"+max);
        }


//        3. 输⼊⼀个数,判断它是否能被3、5、7整除,注意考虑同时整除的情况
       System.out.println("请输入一个数:");
        double num3_1= scanner.nextDouble();
        if((num3_1%3==0)&&(num3_1%5==0)&&(num3_1%7==0))
            System.out.println("请输入的数能同时被3、5、7整除!");
        else
            System.out.println("您输入的数不能同时被3、5、7同时整除!");

        //4.超市为了促销,规定:购物不⾜50元的按原价付款,超过50不⾜100的按九折付款,超过100元的,
        // 超过部分按⼋折付款。编程序完成超市的⾃动计费的⼯作。
        double num4_1= scanner.nextDouble();
        double priceNum=0;
        if(num4_1<50)
            priceNum = num4_1;
        else if  (num4_1>=50&&num4_1<=100)
            priceNum=num4_1*0.9;
        else
              priceNum=(num4_1-100)*0.8+100* 0.9;
        System.out.println("最终的价格为:" + priceNum);


/*
        5.商场实⾏新的抽奖规则:会员号的百位数字等于产⽣的随机数字即为幸运会员。实现如下功能:
            1、从键盘接收4位数会员号
            2、⽣成随机数
            提示:int random = (int) (Math.random() * 10);
            3、算出会员号中在百位的数字号码
            提示:int baiwei = custNo / 100 % 10;
*/

        System.out.println("请输入你的四位数会员号:");
        int vipNum= scanner.nextInt();
        int luckyNum=(int)(Math.random()*10);
        int vipLuckyNum = vipNum/100%10;
        System.out.println("luckyNum是:"+luckyNum);
        System.out.println("你的会员号的百位数是:"+vipLuckyNum);
        if (luckyNum==vipLuckyNum)
            System.out.println("恭喜你中奖了!");
        else
            System.out.println("很遗憾您没有中奖!");



//循环作业
       /* 1.
        要求⽤户输⼊⼀个0到2之间的整数 如果⽤户输⼊0输出“你出的是⽯头”,如果⽤户输⼊1就输出“你出的是剪⼑”,
        如果⽤户输⼊的是2就输出“你出的是布”,然后再问是否要继续出拳,如果回答“y”就重复以上过程,否则结束程序
        */
       /* int num1_1;
        String str;
        do{
            System.out.println("请输入一个0-2之间的整数:");
            num1_1 = scanner.nextInt();
            switch (num1_1){
                case 0:
                    System.out.println("你出的是石头!");
                    break;
                case 1:
                    System.out.println("你出的是剪刀!");
                    break;
                case 2:
                    System.out.println("你出的是布!");
                    break;
                default:
                    System.out.println("输入错误!");
            }
            System.out.println("是否继续出圈?y/n:");
            str= scanner.next();
        }while(str.equals("y"));*/

//        2.求1到100之间所有能被3整除的整数的总和
       int sum=0;
        for(int i=1;i<=100;i++){
            if(i%3==0)
                sum+=i;
        }
        System.out.println("1-100之间所有能被3整除的整数的总和为:"+sum);


 /*       3. 打印出所有的 "⽔仙花数"
        所谓 "⽔仙花数"是指⼀个三位数,其各位数字⽴⽅和等于该数本身。
        例如:153是⼀个 "⽔仙花数 ",因为153=1的三次⽅+5的三次⽅+3的三次⽅。*/
        for (int i = 100; i <= 999; i++) {
            int ge = i % 10;
            int shi = i / 10 % 10;
            int bai = i / 100;
            if (Math.pow(ge, 3) + Math.pow(shi, 3) + Math.pow(bai, 3) == i)
                System.out.println(i);
        }

//        4.计算⽤户输⼊的⽇期离1900年1⽉1⽇相距多少天
        System.out.println("请输入年份:");
        int year= scanner.nextInt();
        System.out.println("请输入月份:");
        int month = scanner.nextInt();
        System.out.println("请输入哪一天:");
        int day= scanner.nextInt();
        int sum_days=0;
        for(int i=1900;i<=year-1;i++) {
            if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
                sum_days += 366;
            else
                sum_days += 365;
        }

        if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
            for (int j = 1; j <= month - 1; j++) {
                switch (j) {
                    case 1, 3, 5, 7, 8, 10, 12:
                        sum_days += 31;
                        break;
                    case 4, 6, 9, 11:
                        sum_days += 30;
                        break;
                    default:
                        sum_days += 29;
                        break;
                }
            }
        }else{
            for (int j = 1; j <= month - 1; j++) {
                switch (j) {
                    case 1, 3, 5, 7, 8, 10, 12:
                        sum_days += 31;
                        break;
                    case 4, 6, 9, 11:
                        sum_days += 30;
                        break;
                    default:
                        sum_days += 28;
                        break;
                }
            }
        }
        sum_days+=(day-1);
        System.out.println("您输入的日期距离1900-1-1这天相距"+sum_days+"天");

       /* 5.请⽤程序接收⼀个三位数,然后打印出所有0到这个数之间 带3和3的倍数的数
        例如有99 , 96 , 93 , 90 , 87 , 84 , 83 , 81 , 78 , 75 , 73 , 72.......等等
*/
       int num=scanner.nextInt();
        for(int i=0;i<=num;i++){
            if(i>=0&&i<=9&&(i%3==0||i==3))
                System.out.println(i);
            else if(i>=10&&i<=99&&(i%10==3||i/10==3||i%3==0))
                System.out.println(i);
            else if(i>=100&&i<=num&&(i%10==3||i/10%10==3||i/100==3||i%3==0))
                System.out.println(i);
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值