Java两周半速成之路(第三天)

一.switch语句

1. 语句定义格式: 

switch(表达式){
    case 常量值1:
        语句体1;
        break;
    case 常量值2:
        语句体2;
        break;
    case 常量值3:
        语句体3;
        break;
    ...
    default:
        语句体n;
        break;
}

2.注意:

(1)表达式的取值:byte,short,int,char

                               JDK5以后可以是枚举类型

                               JDK7以后可以是String类型

(2)case后面只能是常量,不能是变量,同一个switch语句中,csae的常量值必须互不相同。

(3)执行流程: 先计算表达式中的结果值,然后拿着这个值自上而下与每一个case后面的常量值进行比较,如果有匹配的值,就执行对应case中的语句体,当遇到break结束整个switch语句。若没有case与之对应匹配的值,就会执行default语句中的语句体,当遇到break就结束整个switch语句

(4)default不一定要有,如果有程序会更加严谨

(5)default不一定要放在最后,可以放在switch中的任意位置,不影响运行流程

(6)break可以不写,但是可能会发生switch穿透 

       switch穿透:如果case语句中没有break语句,将继续执行后面case或者default中的语句,直到遇到break语句为止。

3.练习

(1)购买下列饮料,前提,假设带的金额正好是一瓶饮料的价格

             可乐 3元       脉动 6元         旺仔 5元             汇源 14元              椰子汁 8元

 //案例:购买饮料的案例,前提,假设带的金额正好是一瓶饮料的价格
        //可乐 3   脉动 6   旺仔 5  汇源 14  椰子汁 8
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入饮料的价格:");
        int money = sc.nextInt();
        switch (money) {
            case 3:
                System.out.println("购买了一瓶可乐");
                break;
            case 6:
                System.out.println("购买了一瓶脉动");
                break;
            case 14:
                System.out.println("购买了一瓶汇源");
                break;
            case 5:
                System.out.println("购买了一瓶旺仔");
                break;
            case  8:
                System.out.println("购买了一瓶椰子汁");
                break;
            default:
                System.out.println("输入的金额有误");
        }
(2)观察下列代码,写出y的值

第一题:

知识点:遇到break就结束整个switch语句

 public static void main(String[] args) {
        int x = 2;
        int y = 3;
        switch (x) {
            default:
                y++;
                break;
            case 3:
                y++;
            case 4:
                y++;
        }
        System.out.println("y=" + y); // 4
    }

结果:y=4

第二题:

 知识点:switch穿透

    public static void main(String[] args) {
        int x = 2;
        int y = 3;
        switch (x) {
            default:
                y++;
            case 3:
                y++;
            case 4:
                y++;
        }
        System.out.println("y=" + y);  // 6

结果:y=6

(3)利用switch穿透简化程序

        Scanner sc = new Scanner(System.in);

        System.out.println("题目:以下哪一种是关系型数据库?()");
        System.out.println("A.redis  B.clickhouse  C.Mysql  D.hbase");
        System.out.println("请输入您的选项:");
        String choice = sc.next();
        switch (choice){
            case "A":
            case "B":
            case "D":
                System.out.println("选择错误");
                break;
            case "C":
                System.out.println("选择正确");
        }

 二.循环结构

1.while循环

1.1  语句定义格式:

语句定义格式:
    初始化条件语句;
    while(判断条件语句){
        循环语句体;
        控制条件语句;
    }

1.2   while循环练习

我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?

        int high = 884800;
        int paperHigh = 1;
        int count =0;
        while (paperHigh < high) {
            count++;
            paperHigh = paperHigh * 2;
        }
        System.out.println(count+"次");
        System.out.println(paperHigh*1.0/100+"米");

结果:20次
 折叠后纸的厚度为10485.76米

2.for循环

2.1   语句定义格式:

for循环的语句定义格式:
    for(初始化条件语句;判断条件语句;控制条件语句){
        语句体;
    }

 2.2   for循环注意事项:

1、初始化条件语句只会在循环开始执行一次,后续不执行

2、初始化条件语句可以提前写在for循环外面, 这样作用域在for循环外部也可以使用初始化条件语句定义的变量

3、当for循环中的语句体只有一行的时候,大括号可以省略, 建议不要省略大括号

4、判断条件语句能否不写?可以,但是不写就是无条件执行,会变成死循环

5、最简单的for死循环就是for(;;){...}

2.3for循环练习:

(1)

请在控制台输出数据1-10
请在控制台输出数据10-1
求出1-10之间数据之和
求出1-100之间偶数和
求出1-100之间奇数和
求5的阶乘
//   请在控制台输出数据1-10
        for (int i = 1; i <= 10; i++) {
            System.out.println(i);
        }
        // 请在控制台输出数据10-1
        for (int i = 10; i > 0; i--) {
            System.out.println(i);
        }
        //   求出1-10之间数据之和
        int sum = 0;
        for (int i = 1; i <= 10; i++) {
            sum += i;
        }
        System.out.println(sum);
        //  求出1-100之间偶数和
        int ouSum = 0;
        for (int i = 1; i <= 100; i++) {
            if (i % 2 == 0) {
                ouSum += i;
            }
        }
        System.out.println(ouSum);
        // 求出1-100之间奇数和
        int jiSum = 0;
        for (int i = 1; i <= 100; i++) {
            if (i % 2 != 0) {
                jiSum += i;
            }
        }
        System.out.println(jiSum);
        //求5的阶乘
        int jieCheng=1;
        for (int i = 5; i >0; i--) {
            jieCheng*=i;
        }
        System.out.println(jieCheng);

    }
}

(2) 在控制台输出所有的”水仙花数”,统计”水仙花数”共有多少个

          所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。

          举例:153就是一个水仙花数。      153 = 1*1*1 + 5*5*5 + 3*3*3

        int count = 0;
        for (int i = 100; i <= 999; i++) {
            if(i==(i/100)*(i/100)*(i/100)+(i%100/10)*(i%100/10)*(i%100/10)+(i%10)*(i%10)*(i%10)){
                System.out.println(i);
                count++;
            }
        }
        System.out.println("水仙花数有"+count+"个");

结果:

(3)

需求1:请输出一个4行5列的星星(*)图案。
需求2:请输出如下图形
            *
            **
            ***
            ****
            *****
需求3:在控制台输出九九乘法表。
//需求1:请输出一个4行5列的星星(*)图案。
        for (int j = 1; j <=4; j++) {             //控制行数
            for (int i = 0; i <5; i++) {         //控制列数
                System.out.print("*\t");                  //print表示在当前行输出
            }
            System.out.println();
        }

        /*
        需求2:请输出如下图形
                    *
                    **
                    ***
                    ****
                    *****

         */
        for (int j = 1; j <= 5; j++) {             //控制行数
            for (int i = 1; i <= j; i++) {         //控制列数
                System.out.print("*\t");                  //print表示在当前行输出
            }
            System.out.println();
        }
//        需求3:在控制台输出九九乘法表。
        for (int j = 1; j <= 9; j++) {             //控制行数
            for (int i = 1; i <= j; i++) {         //控制列数
                System.out.print(j + "*" + i + "="+j * i+"\t");                  //print表示在当前行输出
            }
            System.out.println();
        }

3.do…while循环语句

语句格式: 

4.循环结构总结:

1.for循环适合针对一个范围判断进行操作,while循环适合判断次数不明确操作

2.do…while循环至少会执行一次循环体。

三.跳转控制语句

1.break

2.continue

简而言之:break终止整个循环,continue终止当前循环;

3.return

return: 返回,表示结束整个方法,必须是写在方法的最后一条语句

四.方法

1.语句定义格式以及名词解释

  
    修饰符 返回值类型 方法名(参数类型1 参数名1,参数类型2 参数名2,...){
        方法体;
        return 返回值;
    }

    名词解释:
        修饰符:目前来说,修饰符固定写法 public static
        返回值类型:用来限定方法的返回值类型,与return具体返回的值有关
        方法名:随便起,要符合标识符命名规则
        参数:
            两种参数:形参(方法定义时的名字参数),实参(将来调用方法时实际传入的值)
            参数类型:基本数据类型或者引用数据类型
            参数名:随便起,要符合标识符命名规则
        方法体:描述方法要干什么
        return:表示结束整个方法,将结果返回给调用者
        返回值:方法最终给调用者的结果,类型要与返回值类型有关联
   举例:定义一个求两个int数之和的方法
        public static int sumTwoNumber(int i1,int i2){
            int res = i1+i2;
            return res;
        }

2.方法使用过程中的注意事项:

1、方法不能嵌套定义!!方法和方法是平级关系

2、方法不调用,不执行

3、如果一个方法有返回值,将来调用的时候,有两种处理方式:

          1)使用一个变量接收方法的返回值       (建议使用)

          2)直接使用方法的结果

4、方法定义的时候,如果明确了有返回值类型,方法定义内部必要有一个return返回值

5、java提供了一个关键字void,表示方法没有返回值的类型

举例: public static void fun1()  {

                       System.out.println("今天是一个下雪的天气!");

}

3.方法的重载

方法的重载: 在同一个类中,方法名相同,方法的参数列表(参数的个数,参数类型)不同,与返回值无关的现象,叫做方法的重载.

注意事项: 1. 传参的时候,注意数据类型大小关系

                 2. 传递时候,根据顺序从左向右传参,顺序不要搞错.

演示:

public static int sum(int a, int b) {
        return a + b;
    }

    public static long sum(int x, long y, int z) {
        return x + y + z;
    }

    public static void main(String[] args) {
        //需求1: 求两个数之和
        int a = 3;
        int b = 4;
        System.out.println(sum(a, b));

        //需求2: 求三个数之和
        int c = 5;
        //JVM会根据方法名和参数列表在类中查找对应的方法并调用,若没有,则报错
        System.out.println(sum(a, b, c));

        long b1 = 10L;
        System.out.println(sum(a, b1, c));

小练习:

(1)键盘录入两个数据,返回两个数中的较大值

   //键盘录入两个数据,返回两个数中的较大值
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一个数据:");
        int a = sc.nextInt();
        System.out.println("请输入第二个数据:");
        int b = sc.nextInt();
        compare(a, b);
    }

    public static void compare(int a, int b) {
        if (a > b) {
            System.out.println("最大值为" + a);
        } else {
            System.out.println("最大值为" + b);
        }

    }

(2)键盘录入行数和列数,输出对应的星形

 //键盘录入行数和列数,输出对应的星形
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入行数:");
        int a = sc.nextInt();
        System.out.println("请输入列数:");
        int b = sc.nextInt();
        printStar(a, b);


    }
    public static void printStar(int row, int col) {
        for (int i = 0; i < row; i++) {              //控制行数
            for (int j = 0; j < col; j++) {               //控制列数
                System.out.print("*\t");
            }
            System.out.println();
        }
    }

到此结束  最后祝:

大伙儿元宵快乐!!!

  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值