零基础 “入坑” Java--- 三、程序逻辑控制

经过前面两个章节的学习,我们已经可以通过代码进行一些简单的运算。为了帮助我们解决更复杂的问题,我们继续学习Java中的逻辑控制语句

在这一章节中,我们来详细介绍一下Java中的顺序结构、分支结构以及循环结构。

一、顺序结构

顺序结构较为简单,顾名思义,就是按照代码编写的顺序一行一行的执行。

        System.out.println("aa");
        System.out.println("bb");
        System.out.println("cc");
        //运行结果
        //aa
        //bb
        //cc

如果调整代码的顺序,则运行结果也会发生变化。

        System.out.println("cc");
        System.out.println("bb");
        System.out.println("aa");
        //运行结果
        //cc
        //bb
        //aa

二、分支结构

1.if语句

1.1 语法格式1

if(布尔表达式){
//语句
}

如果布尔表达式的结果为true,则执行if中的语句,否则不执行。

举个栗子:编写一段代码,小王考试考到90分以上,奖励看手机。

        int score = 95; //假设小王考95
        if(score > 90){
            System.out.println("玩手机");
        }

1.2 语法格式2

if(布尔表达式){
//语句1
}else{
//语句2
}

如果布尔表达式的结果为true,则执行if中的语句1,否则执行else中的语句2。

举个栗子:编写一段代码,小王考试考到90分以上,奖励看手机;考不到,就打屁股。

        int score = 95; //假设小王考95
        if(score > 90){
            System.out.println("玩手机");
        }else{
            System.out.println("打屁股");
        }

1.3 语法格式3

if(布尔表达式1){
//语句1
}else if(布尔表达式2){
//语句2
}else{
//语句3
}

如果表达式1的结果为true,则执行语句1;否则判断表达式2,若表达式2结果为true,则执行语句2;否则执行语句3。

举个栗子:

为了促进学生心理健康,某次考试不公开分数,只进行大致分类。分类要求如下:
分数在 [90, 100] 之间的,为优秀
分数在 [80, 90) 之前的,为良好
分数在 [70, 80) 之间的,为中等
分数在 [60, 70) 之间的,为及格
分数在 [0, 60) 之间的,为不及格
否则数据错误

        int score = 95;
        if(score >= 90 && score <= 100){
            System.out.println("优秀");
        }else if(score >= 80 && score < 90){
            System.out.println("良好");
        }else if(score >= 70 && score < 80){
            System.out.println("中等");
        }else if(score >= 60 && score < 70){
            System.out.println("及格");
        }else if(score >= 0 && score < 60){
            System.out.println("不及格");
        }else{
            System.out.println("数据错误");
        }

注意:

  • 在使用if else语句时,注意分号,不要多写。
  • 为了代码的可读性更好,应注意书写规范。
  • else总是和与之最近的if进行匹配。

1.4 【练习】

(1) 判断数字奇偶

判断一个数字是奇数还是偶数,可以将这个数用2取余,看取余的结果是否为0。

        int n = 10;
        if(n % 2 == 0){
            System.out.println("n 为偶数");
        }else{
            System.out.println("n 为奇数");
        }
(2) 判断数字正负

判断正负,我们直接用数字与0相比即可。

        int n = 10;
        if(n > 0){
            System.out.println("n 为正数");
        }else if(n < 0){
            System.out.println("n 为负数");
        }else{
            System.out.println("n 为0");
        }

(3) 判断闰年

闰年的条件是:一:能被4整除,但不能被100整除的年份(例如2008是闰年,1900不是闰年) 二:能被400整除的年份(例如2000年)也是闰年。

对于闰年的判断,先判断是否为整百年;若为整百年,就用400取余判断是否为闰年;否则就用4取余判断是否为闰年。

        int year = 2000;
        if(year % 100 == 0){
            if(year % 400 == 0){
                System.out.println("是闰年");
            }else{
                System.out.println("不是闰年");
            }
        }else{
            if(year % 4 == 0){
                System.out.println("是闰年");
            }else{
                System.out.println("不是闰年");
            }
        }

if语句可以进行嵌套使用,即if当中嵌套了if。

2.switch语句

语法格式

switch(表达式){
case 常量值1:{
语句1;
[break;]
}
case 常量值2:{
语句2;
[break;]
}
… …
default:{
以上内容都不满足时所执行语句;
[break;]
}
}

执行过程:

1.先计算表达式的值。
2.和case后的常量值进行比较,若能匹配就执行括号中的语句,直至遇到break时结束。
3.若没有与case后的常量值匹配成功,就执行default中的语句。

举个栗子:根据day的值输出星期几。

        int day = 1;
        switch(day){
            case 1:{
                System.out.println("星期一");
                break;
            }
            case 2:{
                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;
            }
            default:{
                System.out.println("输入错误");
                break;
            }
        }

注意:

1.在使用switch语句时,case后的常量值不能重复。


2.switch括号内的表达式只能是byte、char、short、int、String常量、枚举类型。(long类型不行!!!)


3.switch括号内的表达式不能为复杂语句。


4.break不要遗漏,break是switch停止的标志。如果没有break,程序就会从匹配的case进入,执行到switch语句结束,会失去“多分支选择”的效果。

综上所述,switch语句的使用局限性较大,代码也过于冗长,但依旧有符合switch使用的场景存在。

三、循环结构

1.while循环

语法格式

while(循环条件){
循环语句;
}

循环条件为true,就执行循环语句;否则循环结束。

举个栗子:

1.1 打印1~10的数字

        int n = 1;
        while(n <= 10){
            System.out.println(n);
            n++;
        }

1.2 计算1~100的和

        int n = 1;
        int result = 0;
        while(n <= 100){
            result += n;
            n++;
        }
        System.out.println(result); //5050

1.3 计算5的阶乘

        int n = 1;
        int result = 1;
        while(n <= 5){
            result *= n;
            n++;
        }
        System.out.println(result); //120

1.4 计算1~5的阶乘的和

        int n = 1;
        int sum = 0;
        //外层循环求阶乘的和
        while(n <= 5){
            int m = 1;
            int tmp = 1;
            //内层循环求各个数的阶乘
            while(tmp <= n){
                m *= tmp;
                tmp++;
            }
            sum += m;
            n++;
        }
        System.out.println(sum); //153

在这里我们发现,当代码中出现循环嵌套循环时,代码的复杂度就会提高。

2.break语句

break的功能是让循环提前结束。

举个栗子:找出100~200中第一个3的倍数。

        int n = 100;
        while(n <= 200){
            if(n % 3 == 0){
                System.out.println("找到了,为" + n);
                break;
            }
            n++;
        }

当代码符合if的判断条件时,进入到if语句中,遇到break就会让循环结束。

总结:break结束整个循环。

3.continue语句

continue的作用是仅跳过本次循环,并进入下次循环。

举个栗子:打印出100~200中所有3的倍数。

        int n = 100;
        while(n <= 200){
            if(n % 3 != 0){
                n++;
                continue;
            }
            System.out.println(n);
            n++;
        }

当代码执行到continue语句时,就会跳过continue后面的语句,再进入到下一次循环从新开始。

总结:continue结束单次循环。

4.for循环

语法格式

for(表达式1;布尔表达式2;表达式3){
表达式4;
}

  • 表达式1:初始化循环变量的初始值,在循环最开始时执行,只执行一次。
  • 布尔表达式2:循环条件,满足条件则循环继续,否则循环结束。
  • 表达式3:循环变量的更新模式。

执行过程为:1234—>234—>234—>…—>2为false时,循环结束。

举个栗子:

4.1 打印1~10的数字

        for (int i = 1; i <= 10; i++) {
            System.out.println(i);
        }

4.2 计算1~100的和

        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        System.out.println(sum); //5050

4.3 计算5的阶乘

        int result = 1;
        for (int i = 1; i <= 5; i++) {
            result *= i;
        }
        System.out.println(result); //120

4.4 计算1~5的阶乘的和

        int sum = 0;
        //外层循环求阶乘的和
        for (int i = 1; i <= 5; i++) {
            int tmp = 1;
            //内层循环求各个数的阶乘
            for (int j = 1; j <= i; j++) {
                tmp *= j;
            }
            sum += tmp;
        }
        System.out.println(sum); //153

使用for循环计算阶乘的和,其逻辑要比使用while循环更容易理解,可读性更好。

补充:continue和break也可以在for循环中使用。

5.do while循环

语法格式

do{
循环语句;
}while{循环条件};

do while语句无论循环条件是否为真,都最少执行一次循环语句。
举个栗子:打印1~10

        int n = 1;
        do{
            System.out.println(n);
            n++;
        }while(n <= 10);

注意:while()后的分号不要忘记。

do while循环的使用场景较少,着重理解for和while循环即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值