【JavaSE】- 程序控制结构(上)

1.1🍭 程序流程控制介绍

在程序中,程序运行的流程控制决定程序是如何执行的,是我们必须掌握的,主要有三大流程控制语句。

  1. 顺序控制
  2. 分支控制
  3. 循环控制

1.2🥛单分支

在这里插入图片描述
在这里插入图片描述

代码实现

import java.util.Scanner;
public class If01 {
    public static void main(String[] args) {
        //编写一个程序,可以输入人的年龄,如果该同志的年龄大于 18 岁,
        // 则输出 "你年龄大于 18,要对自己的行为负责,送入监狱"
        //
        //思路分析
        //1. 接收输入的年龄, 应该定义一个 Scanner 对象
        //2. 把年龄保存到一个变量 int age
        //3. 使用 if 判断,输出对应信息
        //应该定义一个 Scanner 对象

        Scanner myScanner = new Scanner(System.in);
        System.out.println("请输入年龄");
		//把年龄保存到一个变量 int age
        int age = myScanner.nextInt();
		//使用 if 判断,输出对应信息
        if(age > 18) {
            System.out.println("你年龄大于 18,要对自己的行为负责,送入监狱");
        }
        System.out.println("程序继续...");

    }
}

运行结果
在这里插入图片描述

1.3🥕多分支

在这里插入图片描述
在这里插入图片描述
代码实现

import java.util.Scanner;
public class If02 {
    public static void main(String[] args) {
        //编写一个程序,可以输入人的年龄,如果该同志的年龄大于 18 岁, //则输出 "你年龄大于 18,要对
        //自己的行为负责, 送入监狱"。否则 ,输出"你的年龄不大这次放过你了."
        //
        //思路分析
        //1. 接收输入的年龄, 应该定义一个 Scanner 对象
        //2. 把年龄保存到一个变量 int age
        //3. 使用 if-else 判断,输出对应信息

        //应该定义一个 Scanner 对象
        Scanner myScanner = new Scanner(System.in);
        System.out.println("请输入年龄");
        //把年龄保存到一个变量 int age
        int age = myScanner.nextInt();
        //使用 if-else 判断,输出对应信息
        if(age > 18) {
            System.out.println("你年龄大于 18,要对自己的行为负责,送入监狱");
        } else {//双分支
            System.out.println("你的年龄不大这次放过你了");
        }
        System.out.println("程序继续...");
    }
}


运行结果
在这里插入图片描述
练习题

public class IfExercise01 {
    public static void main(String[] args) {
        // 求下列程序的输出结果
        int x = 7;
        int y = 4;
        if(x>5) {
            if(y>5) {
                System.out.println(x+y);
            }
            System.out.println("哈哈");
        } else
            System.out.println("x is "+x);
    }
}

输出结果
在这里插入图片描述
练习题

  1. 编写程序,声明 2 个 double 型变量并赋值。判断第一个数大于 10.0,且第 2 个数小于 20.0,打印两数之和。
 double d1 = 10.1;
 double d2 = 2.2;
 double sum = d1+d2;
 if (d1>10.0 && d2<=20.0)
 {
     System.out.println("d1+d2 = "+sum);
 }

练习题

  1. 定义两个变量 int,判断二者的和,是否能被 3 又能被 5 整除,打印提示信息
int n1 = 10;
int n2 = 20;
if((n1+n2) %3==0 && (n1+n2)%5==0)
{
System.out.println("这个数既能被3整除又能被5整除");
}
else
{
System.out.println("这个数不能被3整除又能被5整除");
}

练习题

  1. 判断一个年份是否是闰年,闰年的条件是符合下面二者之一:
    (1)年份能被 4 整除,但不能被 100 整除;
    (2)能被 400整除
int year = 2000;
if(year%400==0 || (year%4==0 && year%100!=0))
{
    System.out.println(year+"是闰年");
}
else
{
    System.out.println(year+"不是闰年");
}

输出结果
在这里插入图片描述

2.1🍥多分支

在这里插入图片描述
在这里插入图片描述

练习题

输入保国同志的芝麻信用分:
如果:

  1. 信用分为 100 分时,输出 信用极好;
  2. 信用分为(80,99]时,输出 信用优秀;
  3. 信用分为[60,80]时,输出 信用一般;
  4. 其它情况 ,输出 信用 不及格
  5. 请从键盘输入保国的芝麻信用分,并加以判断
/**
 * 多分支
 */
import java.util.Scanner;
public class If03 {
    public static void main(String[] args) {
//        输入保国同志的芝麻信用分:
//        如果:
//        1) 信用分为 100 分时,输出 信用极好;
//        2) 信用分为(80,99]时,输出 信用优秀;
//        3) 信用分为[60,80]时,输出 信用一般;
//        4) 其它情况 ,输出 信用 不及格
//        5) 请从键盘输入保国的芝麻信用分,并加以判断
        Scanner myScanner = new Scanner(System.in);
        int score = 0;
        System.out.println("请输入:");
        score =  myScanner.nextInt();
        // 分数的合理范围
        if(score>=0 && score<=100) {
            if (score >= 60 && score <= 80) {
                System.out.println("信用一般");
            } else if (score > 80 && score <= 99) {
                System.out.println("信用优秀");
            } else if (score == 100) {
                System.out.println("信用极好");
            } else {
                System.out.println("信用不及格");
            }
        }else{
            System.out.println("你的信用分输入有误,请重新输入:)");
        }

        }
        
        
    }
}

输出结果
在这里插入图片描述

练习题
在这里插入图片描述

boolean b = true;
if (b==false){
System.out.println("a");
}else if(b){
System.out.println("b");
}else if(!b){
System.out.println("c");
}else{
System.out.println("d");
}

输出结果

b

练习题

boolean b = true;
if (b=false){
System.out.println("a");
}else if(b){
System.out.println("b");
}else if(!b){
System.out.println("c");
}else{
System.out.println("d");
}

输出结果

c

2.2🍬嵌套分支

在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支外面的分支结构称为外 层分支。建议: 不要超过 3 层
(可读性不好)

练习题

参加歌手比赛,如果初赛成绩大于 8.0 进入决赛, 否则提示淘汰。并且根据性别提示进入男子组或女子组。
输入成绩和性别,进行判断和输出信息。

提示: double score; char gender; 接收字符: char gender = scanner.next().charAt(0)

代码实现

import java.util.Scanner;
public class NextedIf {
    public static void main(String[] args) {
//        参加歌手比赛,如果初赛成绩大于 8.0 进入决赛,否则提示淘汰。并且根据性别提示进入男子组或女子组。
//        【可以让学员先练习下】, 输入成绩和性别,进行判断和输出信息

        /*
        //思路分析
        //1. 创建 Scanner 对象,接收用户输入
        //2. 接收 成绩保存到 double score
        //3. 使用 if-else 判断 如果初赛成绩大于 8.0 进入决赛,否则提示淘汰
        //4. 如果进入到 决赛,再接收 char gender, 使用 if-else 输出信息
        //代码实现 => 思路 --> java 代码 */
        Scanner myScanner = new Scanner(System.in);
        System.out.println("请输入你的成绩");
        double score = myScanner.nextDouble();
        if (score>8.0){
            System.out.println("请输入你的性别");
            char gender = myScanner.next().charAt(0);
            if(gender == '女'){
                System.out.println("进入女子组");
            }else if(gender == '男'){
                System.out.println("进入男子组");
            }else{
                System.out.println("性别输入有误,请重新输入");
            }
        }else{
            System.out.println("你被淘汰了");
        }

    }
}

输出结果
在这里插入图片描述

练习题
在这里插入图片描述

import java.util.Scanner;
/**
 *         // 根据淡季和旺季的月份和年龄,打印票价
 *         // 4_10月是旺季
 *         //  成人(18-60):60
 *         //  儿童(<18):半价
 *         //  老人>60:1/3
 *
 *         // 其他是淡季
 *         // 成人:40
 *         // 其他:20
 */
public class NextIfExercise {
    public static void main(String[] args) {
        Scanner myScanner = new Scanner(System.in);
        System.out.println("请输入月份:");
        int month = myScanner.nextInt();
        System.out.println("请输入你的年龄");
        int age = myScanner.nextInt();


        if (month>=1 && month<=12) {
            double money = 60.0;
            if (month >= 4 && month <= 10) {
                if (age>=18 && age<=60){
                    System.out.println("你是成年人,票价为:"+money);
                }else if (age>=60){
                    System.out.println("你是老年人,票价为:"+money/2);
                }else if (age>=1 && age<=18){
                    System.out.println("你是青少年,票价为:"+money/3);
                }
            } else{
                if (age>=18 && age<=60){
                    money -= 20;
                    System.out.println("你是成年人,票价为:"+money);
                }else{
                    money -= 40;
                    System.out.println("票价为"+money);
                }
            }
        }else {
            System.out.println("月份不合法请重新输入!");
        }
    }
}

输出结果
在这里插入图片描述

2.3🥟switch分支结构

在这里插入图片描述
在这里插入图片描述

代码实现

import java.util.Scanner;
public class Switch01 {
    public static void main(String[] args) {
//        请编写一个程序,该程序可以接收一个字符,比如:a,b,c,d,e,f,g
//        a 表示星期一,b 表示星期二 …
//        根据用户的输入显示相应的信息.要求使用 switch 语句完成 代码

//        思路分析
//        1. 接收一个字符 , 创建 Scanner 对象
//        2. 使用 switch 来完成匹配,并输出对应信息代码

        Scanner myScanner = new Scanner(System.in);
        System.out.println("请输入一个字符(a-g)");
        char c1 = myScanner.next().charAt(0);//
        //在 java 中,只要是有值返回,就是一个表达式
        switch(c1) {
            default:
                System.out.println("你输入的字符不正确,没有匹配的");
                break;
            case 'a' :
                System.out.println("今天星期一,猴子穿新衣");
                break;
            case 'b' :
                System.out.println("今天星期二,猴子当小二");
                break;
            case 'c' :
                System.out.println("今天星期三,猴子爬雪山..");
                break;
            //.....

        }
        System.out.println("退出了 switch ,继续执行程序");
    }
}

运行结果
在这里插入图片描述
在这里插入图片描述
细节演示

/**
 * switch细节
 */
public class SwitchDetail {
    public static void main(String[] args) {
        // Detail 1:
        // switch(表达式)中的表达式数据类型 ,应和case后的常量类型一致
        // 或者是可以自动转成可以相互比较的类型,比如输入的是char , 常量是int

        // Detail 2:
        // switch(表达式)中的表达式的返回值必须是:
        // (byte、short、int、char、enum、String)

        // Detail 3:
        // case子句中的值必须是常量(1,'a'),而不能是变量

        // Detail 4:
        // default子句是可选的

        // Detail 5:
        // 如果没有写break , 程序会直接执行下一个语句块 ,直到遇到break

        // Detail 6:
        // case()中的值必须不同
        
		// Detail 7:
		// default子句位置可以任意
        char c = 'a';
        char c2 = 'b';
        switch(c){
            case 'a':
                System.out.println("ok1");
                break;
            case 'a'+1 /* "a" */:
                System.out.println("ok2");
                 break;
            case 30 /* c2 */:
                System.out.println("ok3");
                break;
            default:
                System.out.println("ok4");
        }
    }
}

课堂练习

  1. 使用 switch 把小写类型的 char 型转为大写(键盘输入)。只转换 a, b, c, d, e. 其它的输出 “other”。
  2. 对学生成绩大于 60 分的,输出"合格"。低于 60 分的,输出"不合格"。(注:输入的成绩不能大于 100), 提示 成绩/60
  3. 根据用于指定月份,打印该月份所属的季节。3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季

代码实现

import java.util.Scanner;
public class SwitchExercise01 {
   public static void main(String[] args) {
//        1) 使用 switch 把小写类型的 char 型转为大写(键盘输入)。只转换 a, b, c, d, e. 其它的输出 "other"。
       //使用 switch 把小写类型的
        //char 型转为大写(键盘输入)。只转换 a->A, b->B, c, d, e. //其它的输出 "other"。
        //创建 Scanner 对象
             Scanner myScanner = new Scanner(System.in);
             System.out.println("请输入 a-e");
             char c1 = myScanner.next().charAt(0);
             switch(c1) {
                case 'a' :
                    System.out.println("A");
                    break;
                case 'b' :
                    System.out.println("B");
                    break;
                case 'c' :
                     System.out.println("C");
                     break;
                 case 'd' :
                     System.out.println("D");
                     break;
                case 'e' :
                     System.out.println("E");
                     break;
                default :
                    System.out.println("你的输入有误~");
             }

    }
}

运行结果
在这里插入图片描述
练习题

//对学生成绩大于 60 分的,输出"合格"。低于 60 分的,
//输出"不合格"。(注:输入的成绩不能大于 100), 提示 成绩/60
//思路分析
//1. 这道题,可以使用 分支来完成, 但是要求使用 switch
//2. 这里我们需要进行一个转换, 编程思路 :
// 如果成绩在 [60,100] , (int)(成绩/60) = 1
// 如果成绩在 [0,60) , (int)(成绩/60) = 0
//代码实现
        double score = 1.1;
//使用 if-else 保证输入的成绩有有效的 0-100

        if( score >= 0 && score <= 100) {
            switch ((int)(score / 60)) {
                case 0 :
                    System.out.println("不合格");
                    break;
                case 1 :
                    System.out.println("合格");
                    break;
                 default :
                    System.out.println("输入有误");
                    break;
            }
        } else {
            System.out.println("输入的成绩在 0-100");
        }

运行结果
在这里插入图片描述
练习题

//根据用于指定月份,
//打印该月份所属的季节。
//3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季
//[课堂练习, 提示 使用穿透 ]
//
//思路分析
//1. 创建 Scanner 对象, 接收用户输入
//2. 使用 int month 接收
//3. 使用 switch 来匹配 ,使用穿透来完成,比较简洁
        Scanner myScanner = new Scanner(System.in);
        System.out.println("输入月份");
        int month = myScanner.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 1:
            case 2:
            case 12:
                System.out.println("这是冬季");
                break;
            default :
                System.out.println("你输入的月份不对(1-12)");
        }

运行结果
在这里插入图片描述

2.4🍒switch 和 if 的比较

  1. 如果判断的具体数值不多,而且符合 byte、 short 、int、 char, enum[枚举], String 这 6
    种类型。虽然两个语句都可 以使用,建议使用 switch 语句。
  2. 其他情况:对区间判断,对结果为 Boolean 类型判断,使用
    if,if 的使用范围更广

待续未完…
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值