知识点总结:选择结构语句

一、选择结构语句

  • 在实际生活中经常需要做出一些判断,例如:开车开到一个十字路口,就需要对红绿灯进行判断,若前面是红灯,就停车等候;若是绿灯,就通行。Java中有一种特殊的语句称为选择语句,他也需要对一种条件做出判断,从而决定执行哪一段代码。选择语句分为if条件语句和switch条件语句。

(一)if条件语句

  • if条件语句分为三种语法格式

1、if语句

  • if语句是指如果满足某种条件,就进行某种处理。例如:花花妈妈跟花花说“如果你考试得了100分,周末就带你去游乐园玩。”这句话可以通过以下代码来描述:
如果花花考试得了100分
		妈妈周末就带花花去游乐园玩
  • 在上述代码中,如果就相当于Java中的if关键字,“花花考试得了100分”是判断条件,需要用()括起来,“妈妈周末就带花花去游乐园”是执行语句,需要放在{}中。修改后代码如下:
if (花花考试得了100分) {
	妈妈周末就带花花去游乐园
}

在Java中,if语句具体格式如下:

if (条件语句)
{
	代码块
}
  • 在上述格式中,判断条件是一个布尔值,当判断条件为true时,{}中的执行语句才会执行。
  • if语句执行流程图如下:
    在这里插入图片描述
  • 下面通过一个案例来学习if语句的具体用法:
public class p39 {
    public static void main(String[] args) {
        int x = 5;
        if (x < 10) {
            x++;
        }
        System.out.println("x=" + x);
    }
}
  • 运行结果如下:
    在这里插入图片描述
  • 在上述代码第三行定义了一个变量x,初始值为5。在第四至六行代码if语句中判断x的值是否小于10,如果x小于10,就会执行x++。由于x值为5,x<10条件成立,{}中的语句会被执行,变量x的值进行自增。从运行结果来看x的值已经从5变成6了。

2、if…else语句

  • if…else语句是指如果满足某种条件,就进行某种处理,否则就进行另一种处理。例如:要判断一个正整数的奇偶,如果该数字能被2整除则是一个偶数,否则该数字就是一个奇数。
if…else语句具体语法格式如下:
if (判断条件)
{
	执行语句1
	...
}
else
{
	执行语句2
	...
}
  • 上述格式中,判断条件是一个布尔值。当判断条件为true时,if后面{}中的执行语句1会执行。当判断条件为false时,else后面{}中的执行语句2会执行。
  • if…else语句执行流程图如下:
    在这里插入图片描述
  • 判断奇偶数的案例:
public class p39_2{
    public static void main(String[] args) {
        int num = 19;
        if (num % 2 == 0) {
            // 判断条件成立,num被2整除
            System.out.println("num是一个偶数");
        } else {
            System.out.println("num是一个奇数");
        }
    }
}
  • 运行结果如下:
    在这里插入图片描述
  • 上述实例中,第三行代码定义了变量num,num初始值为19;第4~9行代码判断num%2的值是否为0,如果为0则输出"num是一个偶数",否则输出"num是一个奇数"。由于num的值为19,与2取模的结果为1,不等于0,判断条件不成立。因此程序执行else后面{}中的语句,打印"num是一个奇数"。

3、if…else if…else语句

  • if…else if…else语句用于对多个条件进行判断,根据判断结果进行多种不同的处理。
if…else if…else语句具体语法格式如下:
if (判断条件1)
{
	执行语句1
}
else if (判断条件2)
{
	执行语句2
}
...
else if (判断条件n)
{
	执行语句n
}
else
{
	执行语句n+1
}
  • 上述格式中,判断条件是一个布尔值。当判断条件1为true时,if后面{}中的执行语句1会执行。当判断条件为false时,会继续执行判断条件
    ,如果判断条件2为true则执行语句2…,以此类推,如果所有的判断条件都为false,则意味着所有判断条件都不满足,else后面{}中的执行语句n+1会执行。
  • if…else if…else语句的执行流程图如下:
    在这里插入图片描述
  • 下面通过一个案例演示if…else if…else语句的用法,该案例实现对学生考试成绩进行等级划分的程序:
public class p41 {
    public static void main(String[] args) {
        int grade = 75;    // 定义学生成绩
        if (grade > 80) {
            // 满足条件 grade > 80
            System.out.println("优秀");
        } else if (grade >70) {
            // 不满足条件 grade > 80,但是满足条件grade>70
            System.out.println("良好");
        } else if (grade >60) {
            // 不满足条件 grade >70,但是满足条件 grade > 60
            System.out.println("中等");
        } else {
            // 不满足条件 grade >60
            System.out.println("差");
        }
    }
}
  • 运行结果如下:
    在这里插入图片描述
  • 上述代码中第三行代码定义了学生成绩grade为75.grade=75不满足第一个判断条件grade>80,会执行第二个判断条件grade>70,条件成立,因此会打印“良好”。

(二)三元运算符

  • Java提供了一个三元运算符,可以同时操作三个表达式
三元运算符语法格式如下:
判断条件 ? 表达式1 : 表达式2
  • 在上述语法格式中,当判断条件成立时,计算表达式1的值作为整个表达式的结果,否则计算表达式2的值作为整个表达式的结果。
  • 三元运算符的功能与if…else语法相同,但是使用三元运算符可以简化代码。例如,求两个数x、y中的较大者。
  • 如果用if…else语句来实现,具体代码如下:
int x =0;
        int y = 1;
        int max;
        if (x > y) {
            max = x;
        } else {
            max = y;
        }
        System.out.println(max);
  • 用三元运算方法的具体代码如下:
int x =0;
        int y = 1;
        max = x > y? x : y;
        System.out.println(max);
  • 两段代码运行结果都会得到max=1.
  • 使用三元运算符时要注意:
  • (1)条件运算符“?”和“:”是一对运算符,不能分开单独使用。
  • (2)条件运算符的优先级低于关系运算符和算术运算符,但高于赋值运算符。
  • (3)条件运算符可以进行嵌套,结合方向自右向左。例如:a>b?a:c>d?c:d应该理解为a>b?a: (c>d?c:d),也是条件运算符的嵌套情形,即三元表达式中的表达式2又是一个三元表达式。

(四)switch条件语句

  • switch条件语句也是一种很常用的选择语句,与if条件语句不同,他只能对某个表达式的值做出判断,从而决定程序执行哪一段代码。
  • 例如:在程序中使用数字1~7表示星期一到星期天,如果想根据输入的数字去输出对应中文格式的星期值,代码如下:
用于表示星期的数字
		如果等于1,则输出星期一
		如果等于2,则输出星期二
		如果等于3,则输出星期三
		如果等于4,则输出星期四
		如果等于5,则输出星期五
		如果等于6,则输出星期六
		如果等于7,则输出星期天
switch语句的基本语法格式如下:
switch (表达式) {
	case 目标值1:
		 执行语句1
		 break;
	case 目标值2:
		 执行语句2
		 break;
	...
	case 目标值n:
		 执行语句n
		 break;
	default:
		 执行语句n+1
		 break;
}
  • 在上面的格式中,switch语句将表达式的值与每个case中的目标值进行匹配,如果找到了匹配的值,则执行对应case后面的语句;如果没找到任何匹配的值,则执行default 后的语句。switch 语句中的break关键字将在后面的章节中做具体介绍,此处,初学者只需要知道break的作用是跳出switch语句即可。
  • 案列演示switch语句的用法:
public class p43 {
    public static void main(String[] args) {
        int week = 5;
        switch (week) {
            case 1:
                System.out.println("星期一");
                break;
            case 2:
                System.out.println("星期二");
                break;
            case 3:
                System.out.println("星期三");
                break;
            case 4:
                System.out.println("星期四");
                break;
            case 5:
                System.out.println("星期五");
                break;
            case 6:
                System.out.println("星期六");
                break;
            case 7:
                System.out.println("星期天");
                break;
            default:
                System.out.println("输入的数字不正确...");
                break;
        }
    }
}
  • 运行结果如下:
    在这里插入图片描述
  • 若将第三行代码替换为 int week = 8;运行结果如下:
    在这里插入图片描述
  • 在使用switch语句时,如果多个case条件后面的执行语句是一样的, 则执行语句只需书写-次即可。 例如,要判断一周中的某一天是否为工作日, 同样使用数字1~7表示星期一到星期天, 当输人的数字为1、2、3、4、5时就视为工作日,否则就视为休息日。具体代码如下:
public class p44 {
    public static void main(String[] args) {
        int week = 2;
        switch (week) {
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                // 当week满足值1、2、3、4、5中任意一个时,处理方式相同
                System.out.println("今天是工作日");
                break;
            case 6:
            case 7:
                // 当week满足值6、7中任意一个时,处理方式相同
                System.out.println("今天是休息日");
                break;
        }
    }
}
  • 运行结果如下:
    在这里插入图片描述

  • 当变量week的值为1、2、3、4、5中任意一个时,处理方式相同,都会打印“今天是工作日”;当变量week的值为6、7中任意一个时,打印“今天是休息日”。

案例1:构建可进不可退的多级菜单系统

public class XExercise02 {
    public static void main(String[] args) {
        //声明部分
        int mc1, mc2;
        Scanner sc = new Scanner(System.in);

        // 绘制一级菜单
        System.out.println("名片管理系统");
        System.out.println("==================");
        System.out.println("     1.登录");
        System.out.println("     0.退出");
        System.out.println("==================");
        System.out.print("输入菜单选项[1,0]:");

        // 根据用户选择执行相应操作
        mc1 = sc.nextInt();
        switch (mc1) {
            case 1:
               // 调用登录方法
                login();
                break;
            case 0:
                System.out.println("谢谢使用~再见~");
                break;
            default:
                System.out.println("输入的菜单编号有误!");
        }
    }

    private static void login() {
        String username,password;
        Scanner sc = new Scanner(System.in);

        System.out.print("用户名:");
        username = sc.next();
        System.out.print("密 码");
        password = sc.next();

        if (username.equals("Hflower") && password.equals("123456")) {
            System.out.println("登录成功~");
            // 名片管理方法
            cardManagement();
        } else {
            System.out.println("用户们或密码有误,登录失败~");
        }
    }

    private static void cardManagement() {
        int mc2;
        Scanner sc = new Scanner(System.in);

        // 绘制二级菜单
        System.out.println("======名片管理======");
        System.out.println("1.添加名片");
        System.out.println("2.修改名片");
        System.out.println("3.查询名片");
        System.out.println("4.删除名片");
        System.out.println("==================");
        System.out.print("输入菜单编号[1,2,3,4]:");
        mc2 = sc.nextInt();

        switch (mc2) {
            case 1:
                System.out.println("执行添加名片功能~");
                break;
            case 2:
                System.out.println("执行修改名片功能~");
                break;
            case 3:
                System.out.println("执行查询名片功能~");
                break;
            case 4:
                System.out.println("执行删除名片功能~");
                break;
            default:
                System.out.println("输入的菜单编号有误!");
        }

    }
}

  • 运行结果如下:
    在这里插入图片描述
  • 11
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值