Java知识点复习(四)流程控制之选择语句

  1. 1. 1、选择语句🔥
    1. 1.1. 1.1、if 语句🔥
    2. 1.2. 1.2、if-else语句🔥
    3. 1.3. 1.3、if-else-if多分支语句🔥
    4. 1.4. 1.4、if 嵌套语句🔥
    5. 1.5. 1.5、switch 语句🔥

1、选择语句🔥

1.1、if 语句🔥

  • 语法: if(条件表达式){ if 执行体}

    if( ){ }

    ​ { } 的内容只有一句时,大括号可以省略不写

条件表达式: 结果是boolean类型字面值

if 执行体:main方法可以写的内容,if 执行体都可以写

        (1.变量   2.输出语句  3.流程控制语句)

理解: 条件表达式成立,if 执行体执行,条件表达式不成立,不执行 if 执行体。


if 语句流程图:

案例:考试成绩及格,爸爸带我去游乐场!

代码实现:

public class IfExample {
public static void main(String[] args) {

double score =80;

if(score>=60) {
System.out.println("爸爸带我去游乐场");

}
}
}

运行结果:

  • 注意问题:

    ①语法问题
    if() 后面没有分号,如果写了分号不报错!
    ②省略大括号,只限于大括号内只有一句!

    ③局部变量的作用域
    省略大括号的前提条件是只能是一句,但是这句不能是定义的一个局部变量,因为,{ }作用是定义这个局部变量的作用域!

1.2、if-else语句🔥

  • 语法: if (条件表达式) {if体} else {else体}

if ( ) { } else { }

理解: 如果条件表达式成立,执行 if 体,否则,执行else体
if-else要么执行 if 体要么执行else体,一定会执行一个!


if-else 流程图



案例:如果考试成绩及格,爸爸带我去游乐场,否则爸爸揍我一顿!

代码实现:

public class IfElseExample {
public static void main(String[] args) {
double score = 50;
if (score >= 60) {
System.out.println("爸爸带我去游乐场");
}else{
System.out.println("爸爸揍我一顿");

}
}
}

运行结果:



练习:判断一个年份是否是闰年,闰年的条件是符合下面二者之一

​ (1) 年份能被 4 整除,但不能被 100 整除;

​ (2) 能被 400

代码实现:

//思路:
//1. 定义 int year 保存年份
//2. 年份能被 4 整除,但不能被 100 整除 => year % 4 == 0 && year % 100 != 0
//3. 能被 400 整除 => year % 400 == 0

public class LeapYear {
public static void main(String[] args) {
int year = 2020;
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)){
System.out.println("闰年");
} else {
System.out.println("普通年份");
}
}
}

运行结果:


1.3、if-else-if多分支语句🔥

  • 语法: if (条件1) { 执行体1 }
    else if (条件2) { 执行体2 }
    else if (条件3) { 执行体3 }

    else { else 执行体 }

理解: 条件1如果成立,执行体1,程序结束
条件1如果不成立,判断条件2,条件2如果成立,执行条件2,程序结束
如果条件2还不成立,继续判断条件3…
以上所有的条件都不成立,执行else体

注意问题: 无论是怎么执行,都必须执行一个执行体,也只能执行一个执行体!


if-else-if 流程图

案例:小张在系统输入考试成绩,让系统告诉他,他的等级是什么?
90100 优秀!
80
90 良好!
7080 中等!
60
70 及格!
60以下 不及格!

代码实现:

import java.util.Scanner;

public class IfElseIfExample {
public static void main(String[] args) {
//1.创建Scanner类的对象
Scanner sc = new Scanner(System.in);
//2.提示用户输入成绩
System.out.println("请输入考试成绩");
//3.获取用户输入的成绩
double score = sc.nextDouble();
//4.判断成绩等级
if(score >= 90){
System.out.println("优秀");
} else if (score >= 80){
System.out.println("良好");
} else if (score >= 70){
System.out.println("中等");
} else if (score >= 60){
System.out.println("及格");
} else {
System.out.println("不及格");
}
}
}

输入不同成绩,代码运行结果如下:




运行结果完全没有问题,证明这个语句是正确的。


1.4、if 嵌套语句🔥

  • 语法:

    if( ) {
    if( ) {
    // if-else ...
    } else {
    // if-else
    }
    }

理解: 在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支,外面的分支结构称为外层分支。

建议: 嵌套不要超过 3 层,因为可读性不好。

if(外分支){ 
// 外为 true 时执行的代码
if(内分支){
// 内为 true 时执行的代码
}
}

案例:人的年龄大于或等于18岁时为未成年人

代码实现:

public class NestedIfExample {
public static void main(String[] args) {
int age = 20;
boolean Maiores = true;
if (age >= 18){
if (Maiores){
System.out.println("成年人");
}
}
}
}

运行结果:


1.5、switch 语句🔥

  • 语法:

    switch(字面值) {
    case 字面值1:
    语句1...
    break;
    case 字面值2:
    语句2...
    break;
    case 字面值3:
    语句3...
    break;
    ...
    default:
    语句...
    }

关键字翻译:

switch 开关
case 一种情况,一种可能
break 结束swtich语句
default 默认的,以上所有的情况都不执行时,执行default语句

  • 理解: switch的字面值和case字面值进行比对,如果跟那一个case的字面值相同就执行哪一个case语句,如果都不相同,执行default的语句。

    注意: 每一个case的值不能是相同的!

案例:用户在控制台输入1到5,程序输出相应的日计划!
例如,用户输入1, 系统:周一,写代码!

代码实现:

/*日计划:
周一 --------- 写代码
周二 --------- 约会
周三 --------- 看电影
周四 --------- 爬山
周五 --------- 游泳
*/

import java.util.Scanner;

public class Demo01 {
public static void main(String[] args) {
//1.创建Scanner类的对象
Scanner sc = new Scanner(System.in);

//2.提示用户输入1到5
System.out.println("请输入数字1—5,分别表示周一到周五,
看看自己的日计划是什么?");
//3.获取用户输入的1到5
int i = sc.nextInt();

//4.使用switch语句判断
switch(i){
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;
default:
System.out.println("你输入的不是周一到周五");

}
}
}

运行结果:

  • 注意问题:

    1.case穿透问题

    原因:没有写break ,执行后System.out.println( )的 内容会全部输出

    2.case并列问题
    case可以并列,注意case的值不要相同,case 字面值 后用’ : ‘ (英文冒号)隔开

案例:控制台输入月份,系统显示季节!
例如:5 系统:春天!
春天———3 4 5
夏天———6 7 8
秋天———9 10 11
冬天———12 1 2

代码实现:

import java.util.Scanner;

public class Demo02 {
public static void main(String[] args) {
//1.创建Scanner类的对象
Scanner sc = new Scanner(System.in);
//2.提示用户输入一个月份
System.out.println("请输入月份:");
//3.获取用户输入的月份
int month = sc.nextInt();
//4.switch判断
switch (month){
//用户输入的月份是3 或4或 5都执行春天!
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("你输入是月份不存在!");
}
}
}

运行结果:

3.switch版本问题

jdk1.8 (8.0)版本支持的数据类型?

required: “ char, byte, short, int, Character, Byte, Short, Integer, String, or an enum ”

​ 不支持 long类型,double类型,boolean类型

jdk1.7(7.0)之前都不支持String字符串


选择语句就这些内容了,如果发现错误欢迎小伙伴们在评论区指正,感谢阅读。