【JavaSE】逻辑控制:顺序、分支和循环结构

简介: 【JavaSE】逻辑控制:顺序、分支和循环结构


一、概述与顺序结构

1.逻辑控制的概述

逻辑控制包括三种结构:顺序结构,分支结构和循环结构,这里主介绍后面两种

2.顺序结构

顺序结构是结构中最简单,也是最常见的一种。从上到下写代码,从上到下打印数字,就是顺序的一种

二、分支结构

分支结构有两种:if语句和switch语句

1.if语句

(1)简单的if条件语句

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

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

【实例】

public static void main(String[] agrs) {
        int score = 88;
        if(score>=80) {
            System.out.println("分数>="+score+"可以吃大鸡腿");
        }
    }

只要满足条件,就会进入花括号内执行语句;否则直接跳过。

(2)if…else语句

语法规则】如果布尔表达式结果为true,则执行if中语句,否则执行else中语句

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

【实例】二选一

public static void main(String[] agrs) {
       
        int score = 88;
        if(score>=90) {
            System.out.println("吃鸡腿");
        } else {
            System.out.println("吃大嘴巴子");
        }
    }

(3)if…else if多分支语句

【语法结构】表达式1成立,执行语句1,否则表达式2成立,执行语句2,否则执行语句3。其中,可以嵌套多层else if结构

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

【实例】

题目:

分数在 [90, 100] 之间的,为优秀

分数在 [80, 90) 之前的,为良好

分数在 [70, 80) 之间的,为中等

分数在 [60, 70) 之间的,为及格

分数在 [ 0, 60) 之间的,为不及格

错误数据

public static void main(String[] agrs) {
       
        int score = 88;
        if(score >= 90){
        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("及格");
        System.out.println("不及格");
                }else{
        System.out.println("错误数据");
        }
    }
}

(4)代码风格与易错点

【代码风格】

建议:{ 放在 if / else 同一行

int x = 10;
if (x == 10) {
  // 语句1
} else {
  // 语句2
}

【易错1】分号问题:在if后面加了个分号

public static void main(String[] args) {
        int a=10;
        if(a>12);
        {
            System.out.println("测试");
        }
    }

【易错2】悬垂else:也就是if与else的配对问题

public static void main(String[] args) {
       /* int a=10;
        if(a>12);
        {
            System.out.println("测试");
        }*/
        int x = 10;
        int y = 10;
        if (x == 10)
            if (y == 10)
                System.out.println("aaa");
            else
                System.out.println("bbb");
    }

正确做法:需要合理使用括号,不然易出现错误

public static void main(String[] args) {
      
        int x = 10;
        int y = 10;
        if (x == 10) {
            if (y == 10)
                System.out.println("aaa");
        }else
                System.out.println("bbb");
    }

2.switch语句

(1)基本语法

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

【执行流程】

1. 先计算表达式的值

2. 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束

3. 当表达式的值没有与所列项匹配时,执行default

(2)代码实例:根据 day 的值输出星期

public static void main(String[] args) {
        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;
        }
    }

表达式的值会与case后面的值匹配,决定从哪个入口进去

(3)switch语句需要注意的点

  • 多个case后的常量值不可以重复
  • switch的括号内不能是以下类型的表达式:long、float、double、boolean
  • break 不要遗漏, 否则会失去 "多分支选择" 的效果
  • switch 不能表达复杂的条件
  • switch 虽然支持嵌套, 但是很丑,一般不推荐~
  • 表达式的值可以是字符串

3.switch语句与if语句的对比

(1)if语句中的表达式可以是复杂表达式,但是switch不能表达复杂的条件

(2)分支越多,switch语句的优质越大

(3)从使用效率上区分,早对同一个变量的不同值作条件判断时,使用switch语句的效率更高一些,尤其分支越多的时候;从语句的实用性的角度,switch语句肯定不如if语句

三、循环结构

1.while语句

(1)语法结构

while(条件表达式){
循环体;
}

(2)用法举例:用while循环打印1-10的数字

public static void main(String[] args) {
        int i=1;
        while(i<=10) {
            System.out.println(i);
            i++;
        }
    }

2.for语句

(1)语法结构

for(表达式1;布尔表达式2;表达式3){
循环体;
}

表达式1:该表达式用于初始化循环控制变量,它只在循环开始时执行一次。

表达式2:循环条件表达式,它的类型为boolean,如果表达式的值为true就执行一次循环体。

表达式3:该表达式用于改变循环体变量的值。

(2)代码实例:用来计算1-100数字的和

public static void main(String[] args) {
       int i = 1;
       int sum = 0;
       for(i=1;i<=100;i++) {
           sum+=i;
       }
       System.out.println(sum);
    }

3.do…while循环(选学)

(1)语法结构

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

与while循环不同,do…while循环无论条件是否满足,都会执行一次循环语句,剩下的与while循环相同。

(2)注意事项

do while 循环最后的分号不要忘记

四、循环的跳转

循环的跳转也就是由两个语句控制:break与continue;在C语言中都学过,break也就是跳出整个循环体,而continue就是跳过本次的循环(会少一次循环次数),直接进入下一场的循环。

1.break语句

break语句分为两种:不带标号的break与带标号的break。

(1)不带标号的break语句

【介绍】不带标号的break也就是常见的break,用于终止break语句所在的循环。

【用处】可以用在switch、while循环、do…while循环和for循环中

【实例】用来求1-100数字的和,计算完就跳出循环

public static void main(String[] args) {
     int sum = 0;
     int control = 1;
     while(true) {
         sum+=control;
         if(control==100) {
             break;
         }
         control++;
     }
     System.out.println("1-100的总和="+sum);
    }

(2)带标号的break语句

【语法结构】break 标号;

意思:将标号后面的循环终止

【用处】可以终止标号指定的循环,常用于跳出多层循环的情况

【实例】当九九口诀表的积大于16时终止外层循环(部分,用于测试)

先看没有使用break的时候:

public static void main(String[] args) {
       int i = 1;
       for(i=1;i<=5;i++) {
            int j = 1;
            for(j=1;j<=i;j++) {
                System.out.println(i+"*"+j+"="+(i*j));
            }
            System.out.print("\n");
       }
    }

加了标号:

public static void main(String[] args) {
         int i = 1;
loop: for(i=1;i<=5;i++) {
             int j = 1;
           for(j=1;j<=i;j++) {
                        if(i*j>10) {
                            break loop;
                        }
               String result = String.format("%-1d*%d=%-2d", j, i, (i * j));
               System.out.print(result + "  ");
            }
               System.out.print("\n");
       }

对比:

2.continue语句

continue语句也分为两种,不带标号的continue语句和带标号的continue语句

(1)不带标号的

【介绍】和常见的continue一样,用于终止一次循环,进入下一次循环

【去向】常用在while、do…while和for语句中

【用例】输出1-100的数字,过滤掉不能被7整除的数

public static void main(String[] args) {
        int i = 1;
        for(i=1;i<=100;i++) {
            if(i%7!=0) {
                continue;
            }
            System.out.println(i+"、");
        }
    }

结果:

(2)带标号的

【语法格式】continue 标号;

【用处】跳过标号指定的循环语句一次循环,然后判断指定标号的循环条件,以决定是否执行标号指定的循环

【用例】使用带标号的for循环和带标号的continue语句输出九九口诀表

public static void main(String[] args) {
        outer:for(int i=1;i<=9;i++) {
                for(int j=1;j<=9;j++) {
                    if(j>i) {
                       System.out.println();
                        continue outer;
                    }
                    String result = String.format("%-1d*%d=%-2d", j, i, (i * j));
                    System.out.print(result + "  ");
                }
                System.out.println();
        }
    }

结果:

去掉标号:

五、总结(与C的差异)

(1)if语句的条件表达式必须是布尔表达式

(2)switch的表达式可以是字符串,但是有类型的限制

(3)多了带标号的break和continue

相关文章
|
7月前
|
Go C语言
爱上C语言:分支与循环(循环篇)
爱上C语言:分支与循环(循环篇)
|
4月前
|
C语言
关于分支与循环的一些细节
关于分支与循环的一些细节
|
2月前
|
Serverless C语言
C语言控制语句:分支、循环和转向
C语言控制语句:分支、循环和转向
|
6月前
|
存储 Java
JavaSE——流程控制-循环结构(for循环、while循环、小案例、do-while循环、死循环、循环嵌套)
JavaSE——流程控制-循环结构(for循环、while循环、小案例、do-while循环、死循环、循环嵌套)
40 0
|
7月前
|
算法 程序员 C++
C++程序中的循环结构:控制程序重复执行的关键
C++程序中的循环结构:控制程序重复执行的关键
171 2
|
编译器 C语言
初阶C语言:分支与循环(1)--分支语句
C语言中的分支与循环语句分步详解,本篇是分支语句。
10789 2
C#基础Ⅴ-顺序、分支、循环结构
C#基础Ⅴ-顺序、分支、循环结构
|
Java
java从入门到起飞(三)——三大结构(顺序结构、分支结构、循环结构)
java从入门到起飞(三)——三大结构(顺序结构、分支结构、循环结构)
321 0
for循环的执行顺序,一张图就能说明
for循环的执行顺序,一张图就能说明
114 0
【Java|基础篇】逻辑控制-顺序结构、分支结构和循环结构
顺序结构是指代码按照从上往下的顺序依次执行,分支结构是选择语句是条件成立时,才会执行的语句.共有三种.分为是if ,if else和if else if else