six文档

 

  • debug调试 循环语句  

教学目标

  • 能够独立完成猜数字游戏案例
  • 能够独立完成评委打分案例
  • 能够独立完成使用switch编写春夏秋冬案例

第一章 方法重载OverLoad 方法重写 Override

1.1 方法练习

/*
    需求:
        1.定义一个获取两个int数字之和的方法
        2.定义一个获取三个int数字之和的方法
        3.定义一个获取两个double数字之和的方法
        4.定义一个获取三个double数字之和的方法
​
    定义一个获取两个int数字之和的方法
        三要素:
            1.方法名称:     getSum1
            2.未知数据参加运算:     int a,int b
            3.是否产生结果数据:   int
​
    发现问题:
        以下四个方法都是在完成求和功能,在参数列表上已经有区别了,但是我们起了四个不同的的名字,
        这样导致程序员学习和使用的成本增加(记不住)
​
    解决方案:
        方法重载
 */
public class Demo01MethodProblem {
    public static void main(String[] args) {
        //调用方法: 输出调用
        System.out.println(getSum1(10,20));
        System.out.println(getSum2(10,20,30));
        System.out.println(getSum3(10.0,20.0));
        System.out.println(getSum4(10.0,20.0,30.0));
    }
​
    //1.定义一个获取两个int数字之和的方法
    public static int getSum1(int a, int b) {
        System.out.println("求两个int数字之和....");
        return a + b;
    }
​
    //2.定义一个获取三个int数字之和的方法
    public static int getSum2(int a, int b,int c) {
        System.out.println("求三个int数字之和....");
        return a + b + c;
    }
​
    //3.定义一个获取两个double数字之和的方法
    public static double getSum3(double a, double b) {
        System.out.println("求两个double数字之和....");
        return a + b;
    }
​
    //4.定义一个获取三个double数字之和的方法
    public static double getSum4(double a, double b,double c) {
        System.out.println("求三个double数字之和....");
        return a + b + c;
    }
}

1.2 概念

  • 方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。

    • 多个方法在同一个类中

    • 多个方法具有相同的方法名

    • 多个方法的参数不相同,类型不同或者数量不同

  • 注意

    • 参数列表:个数不同,数据类型不同,顺序不同。

    • 重载方法调用:JVM通过方法的参数列表,调用不同的方法。

  • 使用方法重载完成以上练习

public class Demo02MethodOverLoad {
    public static void main(String[] args) {
        //调用方法: 输出调用
        System.out.println(getSum(10,20));
        System.out.println(getSum(10,20,30));
        System.out.println(getSum(10.0,20.0));
        System.out.println(getSum(10.0,20.0,30.0));
​
    }
​
    //1.定义一个获取两个int数字之和的方法
    public static int getSum(int a, int b) {
        System.out.println("求两个int数字之和....");
        return a + b;
    }
​
    //2.定义一个获取三个int数字之和的方法
    public static int getSum(int a, int b,int c) {
        System.out.println("求三个int数字之和....");
        return a + b + c;
    }
​
    //3.定义一个获取两个double数字之和的方法
    public static double getSum(double a, double b) {
        System.out.println("求两个double数字之和....");
        return a + b;
    }
​
    //4.定义一个获取三个double数字之和的方法
    public static double getSum(double a, double b,double c) {
        System.out.println("求三个double数字之和....");
        return a + b + c;
    }
}

1.2 方法重载注意事项一

/*
    参数列表不同有哪些情况,可以构成重载?
        1.参数的数量不同
        2.参数的类型不同
        3.多个类型顺序不同
​
    方法重载关键看: 在方法名称相同的前提下,参数列表必须要有本质(名称不算)的区别
 */
public class Demo03MethodOverLoad {
    public static void main(String[] args) {
​
    }
​
    //1.定义方法method,没有参数
    public static void method() {
​
    }
​
    //2.定义方法method,有一个int参数
    //1没有参数,2有一个参数,参数的数量不同,可以构成重载
    public static void method(int a) {
​
    }
​
    //3.定义方法method,有一个double参数
    //2有一个int参数,3有一个double参数,参数的类型不同,可以构成重载
    public static void method(double a) {
​
    }
​
    //4.定义方法method,有一个int参数和一个double参数
    public static void method(int a, double b) {
​
    }
​
    //5.定义方法method,有一个double参数和一个int参数
    //4是先int后double,5是先double后int,多个类型顺序不同
    public static void method(double a, int b) {
​
    }
}
​

1.3 方法重载注意事项二

/*
    方法重载与哪些因素无关?
        1.与返回值类型无关
        2.与参数名称无关
        3.与修饰符无关
 */
public class Demo04MethodOverLoad {
    public static void main(String[] args) {
​
    }
​
    //1.定义方法method,参数是一个int,一个double
    public static int method(int a, double b) {
        return 0;
    }
    //2.定义方法method,参数是一个int,一个double
    //1返回int类型,2返回double类型,其它没有区别,不能构成重载,因为方法重载与返回值类型无关
    /*public static double method(int a, double b) {
        return 0.0;
    }*/
​
    //3.定义方法method,参数是一个int,一个double
    //1.的参数名称叫a和b,3的参数名称叫c和d,其它没有却别,不能构成重载因为方法重载与参数名称无关
    /*public static int method(int c, double d) {
        return 0;
    }*/
​
    //4.定义方法method,参数是一个int,一个double
    //1修饰符是public static,4修饰符是public,其它没区别,不能构成重载因为方法重载与修饰符无关
    /*public int method(int a, double b) {
        return 0;
    }*/
}

1.4 方法重载练习

  • 需求:判断哪些方法是重载关系。

public static void open(){}
public static void open(int a){}
static void open(int a,int b){}
public static void open(double a,int b){}
public static void open(int a,double b){}
public void open(int i,double d){}
public static void OPEN(){}
public static void open(int i,int j){}

第二章 Debug调试

2.1 什么是Debug模式

是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。

使用IDEA的断点调试功能,查看程序的运行过程 Debug调试窗口介绍

2.2 Debug模式操作流程

  • 如何加断点

    • 选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可

  • 如何运行加了断点的程序

    • 在代码区域右键Debug执行

  • 看哪里

    • 看Debugger窗口

    • 看Console窗口

  • 点哪里

    • 点Step Into (F7)这个箭头,也可以直接按F7

  • 如何删除断点

    • 选择要删除的断点,单击鼠标左键即可

    • 如果是多个断点,可以每一个再点击一次。也可以一次性全部删除

2.3 Debug查看求和

使用步骤:
1.在代码的第一行左侧空白(行号后面)处单击鼠标左键,添加断点
2.右键选择"debug...",进入断点调试界面
​
public class Demo01DeBugSum {
    public static void main(String[] args) {
​
        System.out.println("main...start....");
        int a = 10;
        int b = 20;
​
        int sum = a + b;
​
        System.out.println("sum="+sum);
​
        System.out.println("main...end....");
    }
}

2.4 Debug查看求和方法

public class Demo02DeBug {
    public static void main(String[] args) {
​
        System.out.println("main...start...");
​
        method();
​
        System.out.println("main...end...");
    }
​
    public static void method() {
        for (int i = 1; i <= 5; i++) {
            System.out.println(i);
        }
        return ;
    }
}
​

/*
    断点调试,演示有返回值的方法调用
 */
public class Demo03Debug {
    public static void main(String[] args) {
​
        System.out.println("main...start...");
​
        int a = 10, b = 20;
​
        int sum = getSum(a, b);
​
        System.out.println("和: " + sum);
​
        System.out.println("main...end...");
    }
​
    public static int getSum(int a, int b) {
        int sum = a + b;
        return sum;
    }
}
​

第三章 方法的参数传递

3.1 参数传递的概念

  • 可以理解当我们要调用一个方法时,我们会把指定的数值,传递给方法中的参数,这样方法中的参数就拥有了这个指定的值,可以使用该值,在方法中运算了。这种传递方式,我们称为参数传递。

  • 在这里,定义方法时,参数列表中的变量,我们称为形式参数

  • 调用方法时,传入给方法的数值,我们称为实际参数

3.2 基本数据类型作为方法参数

/*
    参数传递概念:
        当我们要调用一个方法时,我们会把指定的数值,传递给方法中的参数,
        这样方法中的参数就拥有了这个指定的值,可以使用该值,在方法中运算了。
        这种传递方式,我们称为参数传递。

    形式参数:
        在定义方法时,()中定义的变量,称为形式参数,定义时必须不能有值,方法被调用时,才会有值

    实际参数:
        在调用方法时,()中给定的参数(常量/变量),称为实际参数,如果是变量,则必须要有值

    基本类型作为方法的形式参数
    特点:
        形式参数的改变,不会影响实际参数

    原因:
        基本类型作为参数,传递的是具体的数据值
        每个方法都有自己的内存空间,所以每个方法内部的变量也有自己的内存空间,
        即便是不同的方法内部定义了同名的变量,他们的内存空间不同,它们之间互不影响,互不干扰

 */
public class Demo03BaseVar {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println("ms..a="+a);//10
        System.out.println("ms..b="+b);//20

        //调用方法
        change( a, b );//调用方法时,()中给出的参数,称为实际参数

        System.out.println("me..a="+a);//10
        System.out.println("me..b="+b);//20
    }

    //定义方法
    public static void change(int a, int b) {//方法定义时,()中定义的变量,称为形式参数
        System.out.println("cs..a="+a);//10
        System.out.println("cs..b="+b);//20
        a = a * 10;
        b = b * 10;
        System.out.println("ce..a="+a);//100
        System.out.println("ce..b="+b);//200

        return ;//结束方法,返回到调用处
    }
}

注意:形式参数的改变不影响实际参数

3.3 基本数据类型作为方法参数调用图解

3.4 引用数据类型作为方法参数

/*
    参数传递概念:
        当我们要调用一个方法时,我们会把指定的数值,传递给方法中的参数,
        这样方法中的参数就拥有了这个指定的值,可以使用该值,在方法中运算了。
        这种传递方式,我们称为参数传递。

    形式参数:
        在定义方法时,()中定义的变量,称为形式参数,定义时必须不能有值,方法被调用时,才会有值

    实际参数:
        在调用方法时,()中给定的参数(常量/变量),称为实际参数,如果是变量,则必须要有值

    引用类型作为方法的形式参数
    特点:
        形式参数的改变,会影响实际参数
        通过形参找到堆内存空间的数组,修改元素值后,再通过实参看到的是修改后的数组内容

    原因:
        引用变量保存的是堆内存空间的地址值,调用方法传递的是地址值,
        导致多个变量指向同一个数组,只要有一个变量修改的数组的元素,
        其它变量看到的都是修改后的元素

 */
public class Demo04RefVar {
    public static void main(String[] args) {
        int[] a = new int[] {10,20};//数组变量a保存数组在堆内存空间的地址
        System.out.println("ms..a[0]="+a[0]);//10
        System.out.println("ms..a[1]="+a[1]);//20

        //调用方法: 传递的是地址值
        change( a );//调用方法时,()中给出的参数,称为实际参数

        System.out.println("me..a[0]="+a[0]);//100
        System.out.println("me..a[1]="+a[1]);//200
    }

    //定义方法
    public static void change(int[] a) {//方法定义时,()中定义的变量,称为形式参数

        System.out.println("cs..a[0]="+a[0]);//10
        System.out.println("cs..a[1]="+a[1]);//20
        a[0] = a[0] * 10;
        a[1] = a[1] * 10;
        System.out.println("ce..a[0]="+a[0]);//100
        System.out.println("ce..a[1]="+a[1]);//200

        return ;//结束方法,返回到调用处
    }
}

注意:引用类型,作为方法参数,形式参数的改变会影响实际参数

3.5 引用数据类型作为方法参数调用图解

3.6 引用数据类型作为方法参数练习-评委打分

  • 案例需求

    在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。 选手的最后得分为:去掉一个最高分和一个最低分后 的4个评委平均值 (不考虑小数部分)。

  • 思路

    1:定义一个数组,用动态初始化完成数组元素的初始化,长度为6 2:键盘录入评委分数 3:由于是6个评委打分,所以,接收评委分数的操作,用循环改进 4:定义方法实现获取数组中的最高分(数组最大值),调用方法 5:定义方法实现获取数组中的最低分(数组最小值) ,调用方法 6:定义方法实现获取数组中的所有元素的和(数组元素求和) ,调用方法 7:按照计算规则进行计算得到平均分 8:输出平均分

  • 代码实现

import java.util.Scanner;
/*
    引用数据类型作为方法参数练习-评委打分

    案例需求
        在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。
        选手的最后得分为:去掉一个最高分和一个最低分后 的4个评委平均值 (不考虑小数部分)。

    方法定义的实现步骤:
        1.定义方法getArray,获取长度为6的int数组,代表6个评委的评分,元素值通过键盘录入
        2.定义方法printArray,遍历输出一个int数组中的所有元素
        3.定义方法getArrayAvg,计算一个int数组的平均分(总分-最高分-最低分后的平均分)
       
    main方法的实现步骤:
        1.调用getArray方法,获取int数组,保存到int数组变量array中
        2.调用printArray方法,打印6个评委的评分
        3.调用getArrayAvg方法,获取平均分结果,保存到int变量avg中
        4.打印avg的值

 */
public class Demo06Score {
    public static void main(String[] args) {
        //1.调用getArray方法,获取int数组,保存到int数组变量array中
        int[] array = getArray();
        //2.调用printArray方法,打印6个评委的评分
        System.out.print("6个评委的评分: ");
        printArray(array);
        //3.调用getArrayAvg方法,获取平均分结果,保存到int变量avg中
        int avg = getArrayAvg(array);        
        //4.打印avg的值
        System.out.println("6个评委的最终评分的平均分(去掉最大值和最小值): "+avg);
    }
    /*
        1.定义方法,获取长度为6的int数组,代表6个评委的评分,元素值通过键盘录入
            三要素:
                (1)方法名称:                getArray
                (2)是否有未知数据参加运算:    没有,不需要定义参数
                (3)是否产生结果数据:          int[]
     */
    public static int[] getArray() {
        //1.创建长度为6的int数组,采用动态初始化
        int[] array = new int[6];
        //2.创建键盘录入Scanner类的对象
        Scanner sc = new Scanner(System.in);
        //3.获取6个评委的评分,存储到数组中
        for (int i = 0; i < array.length; i++) {
            System.out.println("请输入第" + (i + 1) + "个评委的评分: ");
            array[i] = sc.nextInt();
        }
        return array;
    }

    /*
        2.定义方法printArray,遍历输出一个int数组中的所有元素
            三要素:
                (1)方法名称:                printArray
                (2)是否有未知数据参加运算:    int[] array
                (3)是否产生结果数据:         没有结果,返回值类型void

            打印格式要求:
                数组: {60,70,80,90}
                打印格式:[60, 70, 80, 90]
     */
    public static void printArray(int[] array) {
        //1.打印"[",不换行
        System.out.print("[");

        //2.使用for循环遍历数组
        for (int i = 0; i < array.length; i++) {
            //2.1 如果当前元素不是最后一个元素,打印 元素 + ", ",不换行
            if (i != array.length - 1) {
                System.out.print(array[i] + ", ");
            } else {
                //2.2 如果当前元素是最后一个元素,打印 元素,不换行
                System.out.print(array[i]);
            }
        }
        //3.打印"]",换行
        System.out.println("]");
    }

    /*
        3.定义方法getArrayAvg,计算一个int数组的平均分(总分-最高分-最低分 后的平均分)
            三要素:
                (1)方法名称:                getArrayAvg
                (2)是否有未知数据参加运算:    int[] array
                (3)是否产生结果数据:         int
     */
    public static int getArrayAvg(int[] array) {
        //1.定义int变量sum,初始值0,用来累加求和
        int sum = 0;
        //2.假设索引0元素是最大的,保存到int变量max中
        int max = array[0];
        //3.假设索引0元素是最小的,保存到int变量min中
        int min = array[0];
        //4.使用for循环遍历数组array
        for (int i = 0; i < array.length; i++) {
            //5.把当前元素,累加到求和变量中
            sum += array[i];
            //6.只要当前元素 大于 max,说明max中已经不是最大的了
            if (array[i] > max) {
                //7.把当前元素值 赋值给max
                max = array[i];
            }
            //8.只要当前元素 小于 min,说明min中已经不是最小的了
            if (array[i] < min) {
                //9.把当前元素值 赋值给min
                min = array[i];
            }
        }
        //10.根据题目需求计算平均值
        int avg = (sum - max - min)/(array.length-2);
        //11.返回结果
        return avg;
    }
}

第四章 随机数

4.1 Random产生随机数(掌握)

  • 概述:

    • Random类似Scanner,也是Java提供好的API,内部提供了产生随机数的功能

    • API后续课程详细讲解,现在可以简单理解为Java已经写好的代码

  • 使用步骤:

    1. 导入包

      import java.util.Random;

    2. 创建对象

      Random r = new Random();

    3. 产生随机数

      int num = r.nextInt(10);

      解释: 10代表的是一个范围,如果括号写10,产生的随机数就是0(包括)-9(包括),括号写20,参数的随机数则是0(包括)-19(包括)

  • 使用Random类,完成生成3个10以内的随机整数的操作,代码如下:

    /*
        java.util.Random类: 就是用来帮助我们产生随机数字的,也是引用类型,使用有3个固定的步骤
            1.导包:
                import 包名.类名;
                Random类导包: import java.util.Random;
    
            2.创建对象:
                类名 对象名 = new 类名(参数...);
                键盘录入对象: Scanner sc = new Scanner(System.in);
                    注意: System.in目前是固定写法
                随机数Random类的对象: Random r = new Random();
                    注意:右侧()中什么都不用写,目前是固定写法
    
            3.使用:
                r.nextInt(): 产生一个int范围(正负21亿)内的随机数字
                r.nextInt(整数常量或者int类型变量 n): 产生一个0(包含)到n(不包含n)之间的随机数字
                举例:
                    r.nextInt(10): 产生一个0(包含0)到10(不包含10)之间的随机数字  [0,10) 等价于 [0,9]
                    r.nextInt(100): 产生一个0(包含0)到100(不包含10)之间的随机数字  [0,100) 等价于 [0,99]
    
            4.练习:
                (1)产生10个int范围内的随机数字
                (2)产生10个1(包含1)到100(包含100)之间的随机数字
                    r.nextInt(100): 0,1,2,3......99
                    r.nextInt(100) + 1:
                        0,1,2,3......99
                                    + 1
                      --------------------
                        1,2,3......99,100
    
    
     */
    public class Demo05Random {
        public static void main(String[] args) {
            //创建Random类的对象
            Random r = new Random();
    
            //(1)产生10个int范围内的随机数字
            for (int i = 0; i < 10; i++) {
                //产生1个int范围内的随机数字,保存到int变量num中
                int num = r.nextInt();
                System.out.println(num);
            }
            System.out.println("-------------");
    
            //(2)产生10个1(包含1)到100(包含100)之间的随机数字
            for (int i = 0; i < 10; i++) {
                //产生1个1(包含1)到100(包含100)之间的随机数字
                int num = r.nextInt(100) + 1;
                System.out.println(num);
            }
            System.out.println("-------------");
            while(true) {
                //产生1个1(包含1)到100(包含100)之间的随机数字
                int num = r.nextInt(100) + 1;
                System.out.println(num);
                /*if (num == 1 || num == 100) {
                    break;
                }*/
                if (num == 0 || num == 101) {
                    break;
                }
            }
    
        }
    }

4.2 Random练习-猜数字

  • 需求:程序自动生成一个1-100(包含1和100)之间的数字,使用程序实现猜出这个数字是多少?

  • 效果:

    • 如果猜的数字比真实数字大,提示你猜的数据大了

    • 如果猜的数字比真实数字小,提示你猜的数据小了

    • 如果猜的数字与真实数字相等,提示恭喜你猜中了

  • 代码实现

    /*
        Random练习-猜数字
            需求:程序自动生成一个1-100(包含1和100)之间的数字,使用程序实现猜出这个数字是多少?
            效果:
                如果猜的数字比真实数字大,提示你猜的数据大了
                如果猜的数字比真实数字小,提示你猜的数据小了
                如果猜的数字与真实数字相等,提示恭喜你猜中了
    
            实现步骤:
                1.创建Random类的对象
                2.产生一个1-100(包含1和100)之间的数字保存到int变量guessNum中,以供大家猜测
                3.创建键盘录入Scanner类的对象
                4.到底多少次可以猜对,是不确定的,使用死循环(while(true))
                4.1 获取键盘录入的用户猜测的数字,保存到int变量inputNum中
                4.2 判断 如果用户猜测的inputNum中的数字 等于 产生的 guessNum 中的数字,说明猜对了
                    提示: "恭喜你猜中了"
                    使用break,结束循环
                4.3 判断 如果用户猜测的inputNum中的数字 小于 产生的 guessNum 中的数字,说明没猜对
                    提示: "你猜的数据小了"
                4.4 判断 如果用户猜测的inputNum中的数字 大于 产生的 guessNum 中的数字,说明没猜对
                    提示: "你猜的数据大了"
     */
    public class Demo06GuessNum {
        public static void main(String[] args) {
            //1.创建Random类的对象
            Random r = new Random();
    
            //2.产生一个1-100(包含1和100)之间的数字保存到int变量guessNum中,以供大家猜测
            int guessNum = r.nextInt(100) + 1;
    
            //3.创建键盘录入Scanner类的对象
            Scanner sc = new Scanner(System.in);
    
            //4.到底多少次可以猜对,是不确定的,使用死循环(while(true))
            while (true) {
                //4.1 获取键盘录入的用户猜测的数字,保存到int变量inputNum中
                System.out.println("请输入您猜测的数字(1到100之间的): ");
                int inputNum = sc.nextInt();
    
                //4.2 判断 如果用户猜测的inputNum中的数字 等于 产生的 guessNum 中的数字,说明猜对了
                if (inputNum == guessNum) {
                    //提示: "恭喜你猜中了"
                    System.out.println("恭喜你猜中了");
    
                    //使用break,结束循环
                    break;
    
                } else if (inputNum < guessNum) {
                    //4.3 判断 如果用户猜测的inputNum中的数字 小于 产生的 guessNum 中的数字,说明没猜对
                    //提示: "你猜的数据小了"
                    System.out.println("你猜的数据小了");
                } else {
                    //4.4 判断 如果用户猜测的inputNum中的数字 大于 产生的 guessNum 中的数字,说明没猜对
                    //提示: "你猜的数据大了"
                    System.out.println("你猜的数据大了");
    
                }
    
            }
        }
    }
    

第五章 选择语句

5.1 选择语句--switch

  • switch语句格式:

1.switch语句的格式:	
	switch(表达式) {
        case 常量值1:
            语句体1;
            break;
        case 常量值2:
            语句体2;
            break;
        ...
        case 常量值n:
            语句体n;
            break;
        default:
            语句体n+1;
            break; 	
    }
	其它语句;

2.执行流程:	
	(1)首先计算出表达式的值
	(2)其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
	(3)最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。	

3.注意事项:
	(1)switch语句()中表达式的类型: byte/short/char/int 	String/枚举	---最重要的---
	(2)case后面必须写常量,而且不能重复,常量的类型要和表达式的结果类型匹配
	(3)switch和后面的(),以及()和{}之间都没有分号,case后面常量值的后面是冒号不是分号
	(4)break是用来结束switch语句的,一旦遇到break,直接结束switch语句,
		继续执行switch后面的其它语句
	(5)default是用来兜底的,如果所有的case的常量值和表达式的结果都不相同,直接执行default中的代码
	(6)如果每个case和default后面都有break,那么case和default的顺序可以任意调整,不影响结果
	(7)如果default放在最后的话,那么可以省略default中的break
	(8)语句体: 一条/多条语句(根据题目需求确定)
  • 执行流程

    • 首先计算出表达式的值

    • 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。

    • 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

public class Demo06Switch {
    public static void main(String[] args) {
        int choose = 1;
        switch (choose) {
            case 1:
                System.out.println("你好");
                break;
            case 2:
                System.out.println("我好");
                break;
            case 3:
                System.out.println("大家好,才是真的好");
                break;
            case 4:
                System.out.println("他好,我也好");
                break;
            default:
                System.out.println("一切安好");
                break;
        }
        System.out.println("game...over....");
    }
}

  • switch语句练习-春夏秋冬

    • 需求:一年有12个月,分属于春夏秋冬4个季节,键盘录入一个月份,请用程序实现判断该月份属于哪个季节,并输出。

    • 演示效果

      输入: 1、2、12 输出:冬季

      输入: 3、4、5 输出:春季

      输入: 6、7、8 输出:夏季

      输入: 9、10、11 输出:秋季

      输入:其它数字 输出:数字有误

/* 
    实现步骤:
        1.创建键盘录入Scanner类的对象
        2.获取键盘录入的1到12之间的代表月份的整数数字,保存到int变量month中
        3.因为month中的值有12+1种情况,使用switch判断month中的值,输出对应的季节
 */
public class Demo07SwitchMonth {
    public static void main(String[] args) {
        //1.创建键盘录入Scanner类的对象
        Scanner sc = new Scanner(System.in);

        //2.获取键盘录入的1到12之间的代表月份的整数数字,保存到int变量month中
        System.out.println("请输入1到12之间的代表月份的整数数字: ");
        int month = sc.nextInt();

        //3.因为month中的值有12+1种情况,使用switch判断month中的值,输出对应的季节
        switch (month) {//1
            case 1:
                System.out.println("冬季");
                break;
            case 2:
                System.out.println("冬季");
                break;
            case 12:
                System.out.println("冬季");
                break;
            case 3:
                System.out.println("春季");
                break;
            case 4:
                System.out.println("春季");
                break;
            case 5:
                System.out.println("春季");
                break;
            case 6:
                System.out.println("夏季");
                break;
            case 7:
                System.out.println("夏季");
                break;
            case 8:
                System.out.println("夏季");
                break;
            case 9:
                System.out.println("秋季");
                break;
            case 10:
                System.out.println("秋季");
                break;
            case 11:
                System.out.println("秋季");
                break;
            default:
                System.out.println("您输入的月份不存在,火星来的吧,哥屋恩....");
                break;
        }
        System.out.println("game...over...");
    }
}

switch语句中,表达式的数据类型,可以是byte,short,int,char,enum(枚举),JDK7后可以接收字符串。

5.2 case的穿透性

在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运行,直到遇到break,或者整体switch结束。

package com.itheima06;

import java.util.Scanner;

/*
    switch语句练习-春夏秋冬
    发现问题:
        多个连续的case中,有相同的代码和break,此时可以优化
    解决方案:
        只保留最后一个case中的代码和break,前面的若干个case中的代码和break,全部省略

    case穿透:
        找到第一个常量值和表达式值相同的case后,从该case中的代码一直向下执行,直到遇到break才会结束switch语句
 */
public class Demo08SwitchMonth {
    public static void main(String[] args) {
        //1.创建键盘录入Scanner类的对象
        Scanner sc = new Scanner(System.in);

        //2.获取键盘录入的1到12之间的代表月份的整数数字,保存到int变量month中
        System.out.println("请输入1到12之间的代表月份的整数数字: ");
        int month = sc.nextInt();

        //3.因为month中的值有12+1种情况,使用switch判断month中的值,输出对应的季节
        switch (month) {//1
            case 1:
            case 2:
            case 12:
                System.out.println("冬季");
                break;
            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;
            default:
                System.out.println("您输入的月份不存在,火星来的吧,哥屋恩....");
                break;
        }
        System.out.println("game...over...");
    }
}

第六章 循环嵌套

6.1 需求: 打印3行5列的星

/*
    需求: 打印3行5列的星
    循环嵌套:
        1.概念: 使用一个循环作为另外一个循环的循环体,外部的循环叫做外层循环,内部的循环叫做内层循环
        2.格式:
            for(外初始化表达式1;外循环条件2;外步进表达式7){
                for(内初始化表达式3;内循环条件4;内步进表达式6){
                    内循环体5;
                }
            }
            其它语句8;
        3.注意:
            (1)外层循环初始化表达式 int i = 1 执行了几次?  1次
            (2)内层循环初始化表达式 int j = 1 执行了几次?  3次
            (3)总结:
                外层循环执行1次,内层循环要执行完整的一遍
                内层循环的循环体执行的次数:
                    外层循环执行的次数 * 内层循环每遍执行的次数
 */
public class Demo07ForFor {
    public static void main(String[] args) {
        //使用for循环优化,打印5个星的代码
        for (int i = 1; i <= 3; i++) {//外层循环: 执行3次
            for (int j = 1; j <= 5; j++) {//内层循环: 每遍执行5次
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

6.2 循环嵌套

1.概念: 使用一个循环作为另外一个循环的循环体,内部的循环叫做内层循环,外面的循环叫做外层循环
2.格式:
	for(初始化表达式1;布尔表达式2;步进表达式7) {
        for(初始化表达式3;布尔表达式4;步进表达式6){
            循环体5;
        }
    }
	其它语句8;
3.执行流程:
	1,2(true),3,4(true),5,6 --> 4(true),5,6 --> ... --> 4(false),内层循环结束,7
    --> 2(true),3,4(true),5,6 --> 4(true),5,6 --> ... --> 4(false),内层循环结束,7
    --> ...
    --> 2(false),结束外层循环

6.3 练习

使用嵌套循环,打印2021年至2023年月份,格式:xxxx年x月

/*
    1.使用循环嵌套:
        打印2021年至2023年月份,格式:xxxx年x月

    2.注意:
            (1)外层循环初始化表达式 int year = 2021 执行了几次?  1次
            (2)内层循环初始化表达式 int month = 1 执行了几次?  3次
            (3)总结:
                外层循环执行1次,内层循环要执行完整的一遍
                内层循环的循环体执行的次数: 3 * 12 = 36
 */
public class Demo08ForForMonth {
    public static void main(String[] args) {
        for (int year = 2021; year <= 2023; year++) {//外层循环: 获取年份,循环3次
            for (int month = 1; month <= 12; month++) {//内层循环: 获取每年的12个月份,每遍执行12次
                System.out.println(year + "年" + month + "月");
            }
        }
    }
}
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值