Java基础之:分支(选择)控制语句

Java基础之:分支(选择)控制语句

首先介绍一下程序流程控制,分别是顺序控制,分支控制,循环控制。

分支控制(if-else)

分支控制可以分为三种(也可以是四种)分别是:单分支,双分支,多分支,(分支嵌套)。

单分支:

基本语法:

if(条件表达式){
    执行代码块;(可以有多条语句)
}

说明:

  1. 当条件满足时,执行{}中的代码块。条件不满足则跳过{},直接执行后面的程序语句。

  2. 可以不使用{},用缩进来表示,但仅限于只有一条语句的情况下。

简单案例:

小黄和小范准备结婚,如果钱足够50w就结婚。

import java.util.Scanner;
public class Ifelse
{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);//声明Scanner对象
        System.out.println("请输入现有资金(W):");
        int money = input.nextInt();//接收键盘输入
        //1.单分支
        if(money >= 50){
            System.out.printf("现有资金%dW,结婚花费50W,可以结婚!
",money);
            System.out.printf("结婚后剩余资金%dW
",money - 50);
        }
    }
}

  

双分支:

基本语法:

if(条件表达式){
    执行代码块1;(可以有多条语句)
}else{
    执行代码块2;(可以有多条语句)
}

  

说明:

  1. 双分支结构,满足条件运行代码块1,若不满足条件运行代码块2。

  2. 与单分支相同,同样可以不使用{}。

简单案例:

小黄和小范准备结婚,如果钱足够50w就结婚,否则就不结婚。

import java.util.Scanner;
public class Ifelse
{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);//声明Scanner对象
        System.out.println("请输入现有资金(W):");
        int money = input.nextInt();//接收键盘输入
//      2.双分支
        if(money >= 50){
            System.out.printf("现有资金%dW,结婚花费50W,可以结婚!
",money);
            System.out.printf("结婚后剩余资金%dW
",money - 50);
        }else{
            System.out.printf("现有资金%dW,结婚花费50W,还需%dW
",money,50-money);
        }
    }
}

  

运行结果:

 

多分支:

基本语法:

if(条件表达式1){
    执行代码块1;(可以有多条语句)
}else if(条件表达式2){
    执行代码块2;(可以有多条语句)
}
.....(可以有多个else if语句)
else{
    执行代码块3;(可以有多条语句)
}

  

说明:

  1. 首先判断条件1是否成立,若不成立向下依次判断条件2是否成立。一旦有某个条件,则进入代码块执行。若全部条件都不成立,则执行else中的代码块。

  2. 同样可以不使用{},用缩进来表示,但一定要注意用缩进只能有一条语句。

简单案例:

小黄和小范准备结婚,如果钱足够50w就结婚,如果钱够30w就先结婚然后努力赚钱买车,否则不结婚。

 
import java.util.Scanner;
public class Ifelse
{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);//声明Scanner对象
        System.out.println("请输入现有资金(W):");
        int money = input.nextInt();//接收键盘输入
//      3.多分支
        if(money >= 50){
            System.out.printf("现有资金%dW,结婚花费50W,可以结婚!
",money);
            System.out.printf("结婚后剩余资金%dW
",money - 50);
        }else if(money >= 30){
            System.out.printf("现有资金%dW,结婚至少花费30W,可以结婚!
",money);
            System.out.printf("结婚后剩余资金%dW,距离买车还需%dW。",money-30,20-(money-30));
        }else{
            System.out.printf("现有资金%dW,结婚至少花费30W,还需%dW
",money,30-money);
        }
    }
}

  

运行结果:

分支嵌套:

基本语法:

if(条件表达式1){
    执行代码块1;(可以有多条语句)
}else if(条件表达式2){
    if(条件表达式2.1){
        执行代码块2.1;(可以有多条语句)
    }else{
        执行代码块2.2;(可以有多条语句)
    }
}
.....(可以有多个else if语句)
else{
    执行代码块3;(可以有多条语句)
}

  

说明:

若满足条件表达式2,则需要再次进行判断是否满足条件表达式2.1,若满足执行代码块2.1,若不足执行代码块2.2.

简单案例:

小黄和小范准备结婚,如果钱足够50w就结婚,如果钱够30w就先结婚然后根据剩余资金情况选择购买新车还是二手车。剩余超过10W买新车,不足10买二手车

import java.util.Scanner;
public class Ifelse
{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);//声明Scanner对象
        System.out.println("请输入现有资金(W):");
        int money = input.nextInt();//接收键盘输入
        //4.分支嵌套
        if(money >= 50){
            System.out.printf("现有资金%dW,结婚花费50W,可以结婚!
",money);
            System.out.printf("结婚后剩余资金%dW
",money - 50);
        }else if(money >= 30){
            System.out.printf("现有资金%dW,结婚至少花费30W,可以结婚!
",money);
            if(money - 30 >= 10){
                System.out.printf("婚后现有资金%dW,可以购买新车!
",money-30);
            }else{
                System.out.printf("婚后现有资金%dW,只能购买二手车。
",money-30);
            }
        }else{
            System.out.printf("现有资金%dW,结婚至少花费30W,还需%dW
",money,30-money);
        }
    }
}

  

运行结果:

 

关于 if 的其他注意事项

boolean b = true;
if(b = false){ //注意这里是"="而不是"==",运行过程是 1.b <== false 2.判断if(b)
System.out.println("a");
}else if(b){
   System.out.println("b"); //若上面为"==",则输出b
}else if(!b){
   System.out.println("c");
}else{
   System.out.println("d");
}

这里结果输出:C

选择控制(Switch)

基本语法:

switch(表达式){
    case 常量1:
        语句块1;
        [break;]
    case 常量2:
        语句块2;
        [break;]
    .....
    default:
        default语句块;
        [break;]
}

  

注意事项:

  1. case中常量的数据类型一定和表达式的数据类型一致,或是可以自动转换相互比较的数据类型

  2. switch(表达式)的返回值(6个)必须是:byte,short,char,int,String,enum(枚举)

  3. 如果没有写break,程序会顺序执行到switch结尾,直到seitch结束,或遇到break(”穿透“特性)

说明:

  1. 若表达式的值为常量1,则执行语句块1,若不是则继续向下判断,直到最后所有都不满足则执行default语句块。

  2. break可以选择是否添加进代码里,作用是退出switch语句,直接转到{}后的程序语句。

  3. default这条判断语句也是可以被忽略的,若忽略则当所有条件不满足时什么都不执行直接退出switch。

简单案例1:

int a = 2;
switch(a){
    case 1:
        System.out.println("1");
        break;
    case 2:
        System.out.println("2");
        break;//若不添加break;则会一直判断到最后,具体看下一个案例
    default:
        System.out.println("3");
        break;
}

  

运行结果:2

 

简单案例2:根据用于指定月份,打印该月份所属的季节。3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季。

int month = 1;
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("输入错误");
}

  

运行结果为:冬

说明:

这里用到了switch的一个特性"穿透",即若在case中不添加break语句则会一直穿透下去。

 

简单案例3:对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。

(注:输入的成绩不能大于100 [0-100])

double sroce = 80.3;    //一定要注意switch可以判断的变量类型
if(sroce>0 && sroce<=100){
    switch((int)sroce/60){ //充分利用整除的原理,若大于60则返回1,小于则返回0
        case 1:
            System.out.println("合格");
            break;  
        case 2:
            System.out.println("不合格");
            break;
        //这里就可以不需要用default语句,因为外面已经有了一个if语句进行输入参数的条件判断
    }
}else{
    System.out.println("输入错误");
}

  

运行结果:合格

 

if-else与switch的区别

- 如果需要判断的是具体数据(数值),且数据类型为byte,short,char,int,String,enum(枚举),建议使用switch,虽然if-else也可以。
- 如果需要判断的返回值为Boolean类型数据或区间判断,则建议使用if-else。

原文地址:https://www.cnblogs.com/SongHai/p/14000858.html