面向对象程序设计-第二周

1、Java基础(流程控制)

        程序中最经典的三种执行顺序:顺序结构、分支结构、循环结构

        1.顺序结构:自上而下的执行代码顺序

        2.分支结构(if 和 switch)

                if分支有三种形式:

//题目:分数评级 [90-100] 优秀 [80-90) 良好 [70-80) 中等 [60-70) 及格 60 不及格
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入一个成绩:");
        int score = sc.nextInt();
        if (score <= 100 && score >= 90) {
            System.out.println("优秀");
        } else if (score < 90 && score >= 80) {
            System.out.println("良好");
        } else if (score < 80 && score >= 70) {
            System.out.println("中等");
        } else if (score < 70 && score >= 60) {
            System.out.println("及格");
        } else if (score < 60 && score >= 0) {
            System.out.println("不及格");
        } else {
            System.out.println("数据无效");
        }
    }

                switch分支通过比较具体值来决定执行哪条分支。

                switch分支的执行流程:

               (1)先执行表达式的值,再拿着这个值去与case后的值进行匹配。

               (2)与哪个case后的值匹配为true就执行哪个case块的代码,遇到break就跳出switch分支。

               (3)如果全部case后的值与之匹配都是false,则执行default块的代码。

Scanner sc = new Scanner(System.in);
String day = sc.nextLine();
switch (day) {
            case "周一":
                System.out.println("埋头苦干,解决bug");
                break;
            case "周二":
                System.out.println("请求大牛程序员帮忙");
                break;
            case "周三":
                System.out.println("今晚啤酒、龙虾、小烧烤");
                break;
            case "周四":
                System.out.println("KFC VME 50");
                break;
            case "周五":
                System.out.println("今晚吃鸡");
                break;
            case "周六":
                System.out.println("与王婆介绍的小芳相亲");
                break;
            case "周日":
                System.out.println("郁郁寡欢、准备上班");
                break;
            default:
                System.out.println("输入的日期有误");
                break;
        }

        if 和 switch的对比:当前条件是区间的时候,应该使用if分支结构; 当条件是与一个一个的值比较的时候,switch分支更合适。

        使用switch分支的几点注意事项:

        1.switch只能比较整型和字符、字符串,不支持比较小数

        2.case的值只能是精确值字面量,不能是变量,并且不能重复,如果没写break,会导致穿透

        3.但是穿透性可以帮忙完成某些功能,假设多个case分支执行的代码相同可以利用穿透性。

switch (day) {
            case "周一":
                System.out.println("埋头苦干,解决 bug");
                break;
            case "周二":
            case "周三":
            case "周四":
                System.out.println("请求大牛程序员帮忙");
                break;
            case "周五":
                System.out.println("自己整理代码");
                break;
            case "周六":
            case "周日":
                System.out.println("打游戏");
                break;
            default:
                System.out.println("输入的日期有误");
                break;
        }

        3.循环结构(for 和 while )

        循环语句指的是一段代码可以重复执行多次。 

        for循环语句格式:

        for (初始化语句; 循环条件; 迭代语句)

         {     

                循环体语句(重复执行的代码);

        }

// 输出3次HelloWorld
for (int i = 0; i < 3; i++) {    
    System.out.println("Hello World");
}

        for循环简单案例:

//案例1:求和1-100 sum1
        int sum1 = 0;
        for (int i = 1; i <= 100; i++) {
            sum1 += i;
        }
        System.out.println(sum1);

//案例2:求和1-100奇数和 sum2 循环体判断是否为奇数
        int sum2 = 0;
        for (int i = 1; i <= 100; i++) {
            if(i %2 != 0){
                sum2 += i;
            }
        }
        System.out.println(sum2);//5050

//案例3:和案例2一样 循环体只能出现奇数
        int sum3 = 0;
        for (int i = 1; i <= 100; i+=2) {
            sum3 += i;
        }
        System.out.println(sum3);

        while循环语句的格式:

        初始化语句;

        while (循环条件)

        {    

                循环体语句(被重复执行的代码);    

                迭代语句;

        }

int i = 0;
while (i < 3) 
{    
    System.out.println("Hello World");
    i++;
}

        while循环案例:纸张折叠成珠穆朗玛峰的高度

        需求:世界最高山峰珠穆朗玛峰高度是:8848.86米=8848860毫米,假如我有一张足够大的纸,它的厚度是0.1毫米。请问:该纸张折叠多少次,可以折成珠穆朗玛峰的高度?

double peakHeight = 8848869; 
double paperHeght = 0.1;
//定义变量存储珠穆朗玛峰的高度、纸张的高度。
int count = 0;
//定义变量存储折叠次数
while (paperHeght < peakHeight) //循环条件是(纸张厚度<山峰高度)
{
    paperHeght = paperHeght * 2;
    count ++;
}
System.out.println("当前折叠了"+count);
System.out.println(paperHeght);

        小结:for循环和while循环的执行流程是一模一样的,功能上无区别,for能做的while也能做,反之亦然。 for和while的使用场景:如果已知循环次数建议使用for循环,如果不清楚要循环多少次建议使用while循环。

        死循环:可以一直执行下去的一种循环,如果没有干预不会停下来。

//死循环的基本写法
for ( ; ; ) 
{
    System.out.println("Hello World1");
}
while (true) 
{
    System.out.println("Hello World2");
}

        嵌套循环:指在循环中又包含循环。

        特点:外部循环每循环一次,内部循环会全部执行完一轮。

        案例1:输出4行5列的*

        for (int i = 0; i < 4; i++) {   //i外循环 i行数
            for (int j = 0; j < 5; j++) {  //j内循环 j列数
                System.out.print("*");      //内循环*连续打印一行
            }
            System.out.println();            //外循环换行
        }

        案例2:输出99乘法表

        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j+"*"+i+"="+j*i+"\t");
            }
            System.out.println();
        }

        掌握循环体里面跳转关键字break和continue的使用:

        break :跳出并结束当前所在循环的执行。

        continue:用于跳出当前循环的当次执行,直接进入循环的下一次执行。

        //1.break 惹老婆生气罚我洗碗,我每天要洗碗洗了5天,第三天洗完表现不错,45就不需要了
        for (int i = 1; i <= 5; i++) {
            System.out.println("洗碗"+i);
            if (i == 3)
            {
                break;//直接跳出整个循环体
            }
        }

        System.out.println("------");
        //2.continue 洗碗 5天  第三天出去吃大餐 不用洗  1245是需要的
        for (int i = 1; i <= 5; i++) {
            if (i ==3)
            {
                continue; //结束当次  执行下一次循环
            }
            System.out.println("洗碗"+i);
        }

        

        多学习一点内容:生成随机数Random

        利用random生成随机数步骤如下:

        1.导包import random (IDEA软件自动导包,不需要我们写代码)

        2.创建一个random对象,用来生成随机数

        3.调用random提供的功能,nextint()得到随机数0到9

        Random r = new Random(); 

        for (int i = 0; i < 20; i++) {
            int data = r.nextInt(10);      //默认从0开始,生成的是0-9
            //随机数范围 只会生成整数[0, x)   左取右不取
            System.out.println(data);
        }

        //生成1-10   
        for (int i = 0; i < 20; i++) {
            int data = r.nextInt(10)+1; 
            System.out.println(data);
        }

        //生成3-17    [3,18)  
        for (int i = 0; i < 20; i++) {
            int data = r.nextInt(3,18);
            System.out.println(data);
        }

2、Java基础(数组)

        数组是一个容器,用来存一批同种类型的数据。

        例子:存放整数类型数据用到int[ ]  存放字符串类型数据使用String[ ]

        数组定义的方式: 数据类型[ ]  变量名 = new  数据类型[ ] {数据1,数据2,...}

        简化写法: 数据类型[ ] 变量名 = {数据1,数据2,...}

//20, 10, 80, 60, 90
int[] arr = {20, 10, 80, 60, 90};

//牛二, 西门, 全蛋
String[] names = {"牛二", "西门", "全蛋"};

        定义数组有两种方式:静态初始化数组和动态初始化数组。

        1、静态初始化数组:定义数组的时候直接给数组赋值。注:定义结束后长度已经固定,不可添加或删除数据,但可修改数组中的数据。       数组存放的是数据在的地址,从下标0开始存储。

        int[] x = {10,20,30}; //数组地址从0开始
        //静态初始化数组   x.length 长度为3  x[0]=10 x[1]=20 x[2]=30
        for (int i = 0; i < x.length; i++) {
            System.out.println(x[i]);
        }  //遍历数据

        System.out.println(x[2]);    //当前x[2]=30
        x[2] = 100;                 // x[2]=30改为100
        System.out.println(x[2]);    //x[2]=100
        for (int i = 0; i < x.length; i++) {
            System.out.println(x[i]);
        }

        System.out.println(x.length); //当前静态初始化数组长度固定为3

       静态初始化数组案例1:对数组内的数据进行求和。

        int[] money = {16, 26, 36, 6, 100};//求和
        int sum =0;
        for (int i = 0; i < money.length; i++) {
            sum += money[i];  //16 + 26 +36 +6 +100
        }
        System.out.println(sum);

        静态初始化数组案例2: 求一组成绩数据中及格的人数。

        double[] score = {99, 100, 62, 15, 48, 65, 98, 99, 5, 59.5, 75};
        int count = 0;   //统计及格人数变量
        for (int i = 0; i < score.length; i++) {
            if(score[i]>60)
            {
                count++;
            }
        }
        System.out.println(count);

         2、动态初始化数组:定义数组时先不存入具体的数据,只确定数组存储的数据类型和数组的长度。

        例如:数据类型 []  数组名 = new 数据类型[长度];

                int[ ] a= new int[3];   //定义了一个数组变量a,长度为3,能装3个整形数据

        注意:静态初始化和动态初始化数组的写法是独立的,不可以混用。

                int[ ] arr = new int[3]{30,40,50};   //这种混合定义方式是错的

        在定义了一个动态初始化数组后,如果没有数据赋值的情况下,数组里面是有默认值的。默认值类型如下表所示:

数据类型

明细

默认值

基本类型

byteshortcharintlong

0

floatdouble

0.0

boolean

false

引用类型

类、接口、数组、String

null

                int[ ] a= new int[3]; //例如这是数组a,直接输出结果为3个0的默认值。

        动态初始化数组案例分析:评委打分案例

        某歌唱比赛,需要开发一个系统:可以依次录入6名评委的打分,录入完毕后立即输出平均分做为选手得分。

//1.定义一个动态初始化数组,长度为6
    double[] scores = new double[6];
//2.遍历数组中的每个位置,每次提示用户录入一个评委的分数
// 并存入到数组对应的位置。
//3.循环遍历过程中对每个元素进行求和,最终算出平均分打印出来即可。
    Scanner sc = new Scanner(System.in);
    double sum = 0;
    for (int i = 0; i < scores.length; i++) 
    {
        System.out.println("请输入第"+(i+1)+"个评分的分数:");
        scores[i] = sc.nextDouble();
        sum += scores[i];
    }

    System.out.println("选手的最终得分为"+sum / scores.length);

        思考题:上述案例中6个分数,如果去掉最高分,去掉最低分,再求平均分,请改写程序。

        数组案例拓展1:求数组最大值

        //把数据用数组装起来。求最大值
        int[] facesocres = {15, 9000, 10000, 20000, 9500, -5};
        //定义一个变量用于记录最终的最大值。
        int max = facesocres[0]; //建议赋值第一个数据,如果初始为0,数组都是负数则无效
        //从第二个位置开始:遍历数组的数据,如果遍历的当前数据
        // 大于max变量存储的数据,则替换变量存储的数据为当前数据。
        for (int i = 0; i < facesocres.length; i++) {
            if (facesocres[i] > max) {
                max = facesocres[i];
            }
        }
        System.out.println(max);

        数组案例拓展2:数组反转输出

        //数组数据反转输出
        //1.定义一个数组
        int[] arr = {10,20,30,40,50,60,70,80,90};
        //2.循环体中定义两个变量分别指向数组第一个和数组最后一个
        for (int i = 0, j = arr.length -1; i < j; i++,j--) 
        {
            //定义一个临时变量用于首尾互换
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        //3.遍历数组 反转输出数据 加空格隔开
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值