一、分支结构

1.1 if语句

1.1.1 单分支结构

1
2
3
4
5
if(条件表达式){

语句序列

}

其执行过程如下图所示:

if1

1.1.2双分支结构

1
2
3
4
5
6
7
8
9
if(条件表达式){

语句序列1

}else{

语句序列2

}

其执行过程如下图所示:
if2

1.1.3多分支结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if(条件表达式1){

语句序列1

}else if(条件表达式2){

语句序列2

} ...
else if(条件表达式n){

语句序列n

}else {

语句序列n+1

}

其执行过程如下图所示:
if3

练习

  1. 从键盘输入一个年份,输出该年份有多少天。

    这道题主要涉及到闰年判断的知识。

    闰年年份一般是4的倍数,但不是100的倍数,或者是400的倍数。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    import java.util.Scanner;

    public class runnian {
    public static void main(String[] args){
    Scanner year = new Scanner(System.in);
    int y = year.nextInt();
    if((y%4==0 && y%100 != 0) || y%400 == 0){
    //System.out.println("闰年");
    System.out.println(366);
    }
    else{
    //System.out.println("平年");
    System.out.println(365);
    }
    }
    }
    /* 输入
    2000
    */
    /* 输出
    366
  2. 从键盘读入三个数,将其中最大的数输出。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    import java.util.Scanner;

    public class zuidashu {
    public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int a1 = scan.nextInt();
    int a2 = scan.nextInt();
    int a3 = scan.nextInt();
    int max;
    if (a1 < a2) {
    max = a2;
    } else {
    max = a1;
    }
    if (max < a3) {
    max = a3;
    }
    System.out.println(max);

    }
    }
    /* 输入
    10 20 30
    */
    /* 输出
    30
    */
  3. 输入你的 Java 课程考试分数,输出该成绩对应的评定等级。(90 以上为优秀,80 到 89 为良好,70 到 79 为中等,60 到 69 为及格,60 以下为不及格)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    import java.util.Scanner;

    public class chengji {
    public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int score = scan.nextInt();
    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("不及格");
    }
    }
    }
    /* 输入
    90
    */
    /* 输出
    优秀
    */

1.2 switch 语句

1.2.1 多路分支

Java 中还定义了 switch 语句来实现多路分支。
其语法结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
switch (expression) {
case value1:
语句序列1; // 当 expression 的结果与 value1 匹配时,执行此处语句
[break;]
case value2:
语句序列2; // 当 expression 的结果与 value2 匹配时,执行此处语句
[break;]
...
case valueN:
语句序列n; // 当 expression 的结果与 valueN 匹配时,执行此处语句
[break;]
default:
语句序列n+1; // 如果 expression 与上面的 value 值都不匹配,执行此处语句
}

其执行流程如下图所示:
switch

1.2.2 语法规则

switch case 语句有如下规则:

  • switch 语句中的表达式结果的类型可以是: byte、short、int 或者 char。从 JDK1.5 开始,支持 enum,从 Java SE 7 开始,支持字符串 String 类型
  • switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
  • case 语句中的值的数据类型必须与表达式结果的数据类型相同,而且只能是常量或者字面常量。
  • 当表达式的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。
  • 当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句中 break 是可选的。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句或者 switch 语句执行完毕。
  • switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和表达式的值相等的时候执行。default 分支不需要 break 语句。

练习

利用 switch 语句来判断用户从键盘上输入的运算符,再输出计算后的结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.util.Scanner;

public class jisuan {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String symbol = scan.next();
int a = 10;
int b = 20;
switch (symbol){
case "+":
System.out.println(a+b);
break;
case "-":
System.out.println(a-b);
break;
case "*":
System.out.println(a*b);
break;
case "/":
System.out.println(a/b);
break;
default:
System.out.println("四则运算不够用?");
break;
}
}
}
/* 输入
+
*/
/* 输出
30
*/

从键盘上输入一个月份,然后判断该月份的天数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.util.Scanner;

public class yuefen {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int month = scan.nextInt();
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(31);
break;
case 4:
case 6:
case 9:
case 11:
System.out.println(30);
break;
case 2:
System.out.println(28);
break;
default:
System.out.println("你家一年有"+month+"个月?");
break;
}
}
}
/* 输入
12
*/
/* 输出
31
*/