Java分支语句if-else和switch-case

java基础编程

2.5 程序流程控制

  • 流程控制语句是用来序中各执行顺的,可以把组合成能完一定功能的小逻辑模块 。
  • 顺序结构,分支结构,循环结构

2.5.2分支语句1:if-else结构

格式1,2
  • 只会选一个跳出,不会选多个
格式3
/*
分支结构中的if-else(条件判断结构)


一、三种结构

第一种:
if(条件表达式){
    执行表达式
}

第二种:二选一
if(条件表达式){
    执行表达式1
}else{
    执行表达式2
}

第三种:n选一
if(条件表达式){
    执行表达式1
}else if(条件表达式){
    执行表达式2
}else if(条件表达式){
    执行表达式3
}
...
else{
    执行表达式n
}



*/
class IfTest {
    public static void main(String[] args) {
        
        //举例1
        int heartBeats = 79;
        if(heartBeats < 60 || heartBeats > 100){
            System.out.println("需要做进一步检查");
        }

        System.out.println("检查结束");
        
        //举例2
        int age = 23;
        if(age < 18){
            System.out.println("你还可以看动画片");
        }else{
            System.out.println("你可以看成人电影了");
        }

        //举例3
        if(age < 0){
            System.out.println("您输入的数据非法");
        }else if(age < 18){
            System.out.println("青少年时期");
        }else if(age < 35){
            System.out.println("青壮年时期");
        }else if(age < 60){
            System.out.println("中年时期");
        }else if(age < 120){
            System.out.println("老年时期");
        }else{
            System.out.println("你是要成仙啊~~");
        }
    }
}

从键盘上获得变量

/*
如何从键盘获取不同类型的变量:需要使用Scanner类

具体实现步骤:
1.导包:import java.util.Scanner;
2.Scanner的实例化:Scanner scan = new Scanner(System.in);
3.调用Scanner类的相关方法(next() / nextXxx()),来获取指定类型的变量

注意:
需要根据相应的方法,来输入指定类型的值。如果输入的数据类型与要求的类型不匹配时,会报异常:InputMisMatchException
导致程序终止。
*/
//1.导包:import java.util.Scanner;
import java.util.Scanner;

class ScannerTest{
    
    public static void main(String[] args){
        //2.Scanner的实例化
        Scanner scan = new Scanner(System.in);
        
        //3.调用Scanner类的相关方法
        System.out.println("请输入你的姓名:");
        String name = scan.next();
        System.out.println(name);

        System.out.println("请输入你的芳龄:");
        int age = scan.nextInt();//获取int型变量
        System.out.println(age);

        System.out.println("请输入你的体重:");
        double weight = scan.nextDouble();//获取double型变量
        System.out.println(weight);

        System.out.println("你是否相中我了呢?(true/false)");
        boolean isLove = scan.nextBoolean();
        System.out.println(isLove);

        //对于char型的获取,Scanner没有提供相关的方法。只能获取一个字符串
        System.out.println("请输入你的性别:(男/女)");
        String gender = scan.next();//"男"
        char genderChar = gender.charAt(0);//获取索引为0位置上的字符
        System.out.println(genderChar);     
    }

}

if-else练习

/*
岳小鹏参加Java考试,他和父亲岳不群达成承诺:
如果:
成绩为100分时,奖励一辆BMW;
成绩为(80,99]时,奖励一台iphone xs max;
当成绩为[60,80]时,奖励一个 iPad;
其它时,什么奖励也没有。
请从键盘输入岳小鹏的期末成绩,并加以判断

说明:
1. else 结构是可选的。
2. 针对于条件表达式:
   > 如果多个条件表达式之间是“互斥”关系(或没有交集的关系),哪个判断和执行语句声明在上面还是下面,无所谓。
   > 如果多个条件表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面。
   > 如果多个条件表达式之间有包含的关系,通常情况下,需要将范围小的声明在范围大的上面。否则,范围小的就没机会执行了。
*/

import java.util.Scanner;
class IfTest2 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        
        System.out.println("请输入岳小鹏期末成绩:(0-100)");
        int score = scan.nextInt();

        if(score == 100){
            System.out.println("奖励一辆BMW");//be my wife!  BMW <---> MSN
        }else if(score > 80 &&  score <= 99){
            System.out.println("奖励一台iphone xs max");
        }else if(score >= 60 && score <= 80){
            System.out.println("奖励一个 iPad");
        }else{
            System.out.println("什么奖励也没有");
        }
    }
}   

if-else练习2

/*
编写程序:由键盘输入三个整数分别存入变量num1、num2、num3,
对它们进行排序(使用 if-else if-else),并且从小到大输出。

说明:
1. c结构是可以相互嵌套的。
2. 如果if-else结构中的执行语句只有一行时,对应的一对{}可以省略的。但是,不建议大家省略。
*/
import java.util.Scanner;
class IfTest3 {
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入第一个整数:");
        int num1 = scanner.nextInt();
        System.out.println("请输入第二个整数:");
        int num2 = scanner.nextInt();
        System.out.println("请输入第三个整数:");
        int num3 = scanner.nextInt();

        if(num1 >= num2){
            if(num3 >= num1)
                System.out.println(num2 + "," + num1 + "," + num3);
            else if(num3 <= num2)
                System.out.println(num3 + "," + num2 + "," + num1);
            else
                System.out.println(num2 + "," + num3 + "," + num1);
             
        
        }else{
            if(num3 >= num2)
                System.out.println(num1 + "," + num2 + "," + num3);
            else if(num3 <= num1)
                System.out.println(num3 + "," + num1 + "," + num2);
            else
                System.out.println(num1 + "," + num3 + "," + num2);
            
        }

    }
}

if-else例题

int x = 4;
int y = 1;
if (x > 2){
    if (y > 2)
        System.out.println(x + y);
        //上一行没加中括号,if只控制一行
        System.out.println("ai");
        //if控制不了第二行,所以,第二行实际上与if并列,输出
}else
    System.out.println("x is" + x);
//变题
class IfExer {
    public static void main(String[] args) {
        int x = 4;
        int y = 1;
        if (x > 2) 
            if (y > 2) 
                System.out.println(x + y);
                
//if带一行到第二层if,再带一行(x + y)               //System.out.println("atguigu");
            else //就近原则,与最近的if配
                System.out.println("x is " + x);
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,b被赋值false,if跳过
  • 计算狗狗年龄
import java.util.Scanner;
class DogAge {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入狗狗的年龄");
        Double age = scan.nextDouble();
        if (0 < age && age <= 2 ){
            double dogage1 = age * 10.5;
            System.out.println("狗子的年龄是" + dogage1);

        }else if (2 < age ){
            Double dogage2 = 2 * 10.5 + 4 * (age - 2);
            System.out.println("狗子的年龄是" + dogage2);

        }else
            System.out.println("错误!请重新输入");
    }
}
  • 如何获取随机数
    math.random
        //课后练习4:如何获取一个随机数:10 - 99
        int value = (int)(Math.random() * 90 + 10);// [0.0,1.0) --> [0.0,90.0) --->[10.0, 100.0) -->[10,99]
        System.out.println(value);
        //公式:[a,b]  :  (int)(Math.random() * (b - a + 1) )+ a
        Math.random()//random返回大于等于 0.0 且小于 1.0 的伪随机 double 值。
        //如果乘以100,左边还是0.0,右边变成100.0
        //如果乘以90,左边还是0.0,右边变成90.0,可以再加10,得到[10.0,100.0)
        //将结果用int强转截断,就可以得到想要的数。
  • 婚嫁问题
    大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件:
    高:180cm以上;富:财富1千万以上;帅:是。
    如果这三个条件同时满足,则:“我一定要嫁给他!!!”
    如果三个条件有为真的情况,则:“嫁吧,比上不足,比下有余。”
    如果三个条件都不满足,则:“不嫁!”
import java.util.Scanner;

class Marry {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("对象身高多少:(cm)");
        int height = scan.nextInt();
        System.out.println("对象收入如何:(千万)");
        double salary = scan.nextDouble();
        System.out.println("对象帅不帅?(true/false)");
        boolean handsome = scan.nextBoolean();
        if (height >= 180 && salary >=1000 && handsome == true){
            System.out.println("一定嫁给他!!!");
//可以直接写handsome,不一定写handsome==
        }else if (height <= 180 && salary <=1000 && handsome == false){
            System.out.println("不嫁!");

        }else
            System.out.println("嫁吧,比上不足比下有余");
    }
}

参考代码

import java.util.Scanner;

class IfExer1 {
    public static void main(String[] args) {
        
        Scanner scan = new Scanner(System.in);
        
        System.out.println("请输入你的身高:(cm)");
        int height = scan.nextInt();
        System.out.println("请输入你的财富:(千万)");
        double wealth = scan.nextDouble();

        /*
        方式一:
        System.out.println("请输入你是否帅:(true/false)");
        boolean isHandsome = scan.nextBoolean();

        if(height >= 180 && wealth >= 1 && isHandsome){
            System.out.println("我一定要嫁给他!!!");
        }else if(height >= 180 || wealth >= 1 || isHandsome){
            System.out.println("嫁吧,比上不足,比下有余。");
        }else{
            System.out.println("不嫁!");
        }
        */

        //方式二:
        System.out.println("请输入你是否帅:(是/否)");
        String isHandsome = scan.next();

        
        if(height >= 180 && wealth >= 1 && isHandsome.equals("是")){
            System.out.println("我一定要嫁给他!!!");
//判断字符串和变量是否相同,用.equals("")
        }else if(height >= 180 || wealth >= 1 || isHandsome.equals("是")){
            System.out.println("嫁吧,比上不足,比下有余。");
        }else{
            System.out.println("不嫁!");
        }
    }
}

2.5.3 switch-case结构

switch-case结构
/*
分支结构之二:switch-case

1.格式
switch(表达式){
case 常量1:
    执行语句1;
    //break;

case 常量2:
    执行语句2;
    //break;
//注意case后是:
...

default:
    执行语句n;
    //break;
//default类似于else,无需再写常量
}

2.说明:
① 根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。
  当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构
  末尾结束为止。(这点与if-else相反)

② break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构

③ switch结构中的表达式,只能是如下的6种数据类型之一:
   byte 、short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)

④ case 之后只能声明常量。不能声明范围。

⑤ break关键字是可选的。

⑥ default:相当于if-else结构中的else.  
  default结构是可选的,而且位置是灵活的。
*/

class SwitchCaseTest {
    public static void main(String[] args) {
        
        int number = 5;//把number放到了switch括号里作为表达式
        switch(number){
        
        case 0:
            System.out.println("zero");
            break;
        case 1:
            System.out.println("one");
            break;
        case 2:
            System.out.println("two");
            break;
        case 3:
            System.out.println("three");
            break;
        default://位置灵活,如果在上面,那没有break仍然会往下执行
            System.out.println("other");
            //break;
        }


        String season = "summer";
        switch (season) {
        case "spring":
            System.out.println("春暖花开");
            break;
        case "summer":
            System.out.println("夏日炎炎");
            break;
        case "autumn":
            System.out.println("秋高气爽");
            break;
        case "winter":
            System.out.println("冬雪皑皑");
            break;
        default:
            System.out.println("季节输入有误");
            break;
        }



        //**************如下的两种情况都编译不通过*********************
        //情况一,不能boolean
        /*
        boolean isHandsome = true;
        switch(isHandsome){
        
        case true:
            System.out.println("我好帅啊~~~");
            break;
        case false:
            System.out.println("我好丑啊~~~");
            break;
        default:
            System.out.println("输入有误~~~");
        }
        */
        //情况二,不能范围
        /*
        int age = 10;
        switch(age){
        case age > 18:
            System.out.println("成年了");
            break;
        default:
            System.out.println("未成年");
        }
        */
    }
}

switch-case例题

import java.util.Scanner;
//难点,从键盘上或许char,将小写字母转为大写字母
class SwitchExer {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入abcde");
        String word = scan.next();
        char c = word.charAt(0);
        switch (c){
        case 'a':
            System.out.println("A");
        case 'b':
            System.out.println("B");
        case 'c':
            System.out.println("C");
        case 'd':
            System.out.println("D");
        case 'e':
            System.out.println("E");
            break;
        default:
            System.out.println("other");
        }
    }
}
/*
例题:对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。

说明:如果switch-case结构中的多个case的执行语句相同,则可以考虑进行合并。
*/
class SwitchCaseTest1 {
    public static void main(String[] args) {
        
        /*
        int score = 78;
        switch(score){
        case 0:

        case 1:

        case 2:

            ...
        case 100:
        
        }
        */

        /*
        int score = 78;
        if(score >= 60){
        
        }else{
        
        }
        */
        
        int score = 78;
        switch(score / 10){
        case 0:
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            System.out.println("不及格");
            break;
        case 6:
        case 7:
        case 8:
        case 9:
        case 10:
            System.out.println("及格");
            break;

        }
        
        //更优的解决方案:
        switch(score / 60){
        case 0:
            System.out.println("不及格");
            break;
        case 1:
            System.out.println("及格");
            break;
        }
    
    }
}
/*
编写程序:从键盘上输入2019年的“month”和“day”,要求通过程序输出输入的日期为2019年的第几天。

2  15:  31 + 15

5 7: 31 + 28 + 31 + 30 + 7 

....

说明:break在switch-case中是可选的
*/

import java.util.Scanner;
class SwitchDay {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入月份:");
        int month = scan.nextInt();
        System.out.println("请输入天日:");
        int day = scan.nextInt();
        int sumdays = 0;
        switch (month){
        case 12:
            sumdays += 30;
        case 11:
            sumdays += 31;
        case 10:
            sumdays += 30;
        case 9:
            sumdays += 31;
        case 8:
            sumdays += 31;
        case 7:
            sumdays += 30;
        case 6:
            sumdays += 31;
        case 5:
            sumdays += 30;
        case 4:
            sumdays += 31;
        case 3:
            sumdays += 28;
        case 2:
            sumdays += 31;
        case 1:
            sumdays += day;
        }
        System.out.println("2019年" + month + "月" + day + "日" + "是第" + sumdays + "天");
    }
}
/*
从键盘分别输入年、月、日,判断这一天是当年的第几天
 
   注:判断一年是否是闰年的标准:
       1)可以被4整除,但不可被100整除
    或
       2)可以被400整除


说明:
1. 凡是可以使用switch-case的结构,都可以转换为if-else。反之,不成立。
2. 我们写分支结构时,当发现既可以使用switch-case,(同时,switch中表达式的取值情况不太多),
  又可以使用if-else时,我们优先选择使用switch-case。原因:switch-case执行效率稍高。

*/
import java.util.Scanner;
class SwitchYmd {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入年份");
        int year = scan.nextInt();
        System.out.println("请输入月份");
        int month = scan.nextInt();
        System.out.println("请输入天数");
        int day = scan.nextInt();
        int secmonth = 0;
        int sumdays = 0;
        switch (month){
        case 12:
            sumdays += 30;
        case 11:
            sumdays += 31;
        case 10:
            sumdays += 30;
        case 9:
            sumdays += 31;
        case 8:
            sumdays += 31;
        case 7:
            sumdays += 30;
        case 6:
            sumdays += 31;
        case 5:
            sumdays += 30;
        case 4:
            sumdays += 31;
        case 3:
            if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){
                secmonth += 29;
            }else
                secmonth += 28;
            sumdays += secmonth;
        case 2:
            sumdays += 31;
        case 1:
            sumdays += day;
        }
        System.out.println(year + "年" + month + "月" + day + "日" + "是第" + sumdays + "天");
    }
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343