流程控制语句

来自拉钩教育

分支结构的概念

当需要进行条件判断并做出选择时,使用分支结构。

if分支结构

语法结构


if{条件表达式}{
    语句块;
}

判断条件表达式是否成立
  => 若成立,则执行语句块;
  => 若不成立,则跳过语句块;

image.png

编程使用if分支结构模拟网吧上网的过程

         //1.提示用户输入年龄信息并使用变量记录
        System.out.println("请输入您的年龄:");
        Scanner sc = new Scanner(System.in);
        int age = sc.nextInt();
        //2.使用if分支结构判断是否成年并给出相应的提示
        if(age>=18){
            System.out.println("您可以开始上网了");
        }
        //打印一句话
        System.out.println("快乐的时光总是短暂的!");
    }
      //如果满足条件,年龄>=18就会执行if分支结构里的代码块 反之就不会执行
image.png

image.png

if-else分支结构

语法格式

if(条件表达式){
    代码块1;
}else{
    代码块2;
}

• 判断条件表达式是否成立
=> 若成立,则执行语句块1;
=> 若不成立,则执行语句块2;
image.png

编程使用if-else分支结构来模拟考试成绩查询的过程

        // 1.提示用户输入考试成绩并使用变量记录
        System.out.println("请输入您的考试成绩:");
        Scanner sc = new Scanner(System.in);
        int score = sc.nextInt();
        
        // 2.使用if else分支结构判断考试成绩是否及格并给出对应的提示
        if(score >= 60) {
            System.out.println("恭喜您考试通过了!");
        } else {
            System.out.println("下学期来补考吧!");
        }
        
        // 3.打印一句话
        System.out.println("世界上最遥远的距离不是生与死而是你在if我在else,似乎一直相伴却又永远分离!");

image.png

if else if else

语法结构


if(条件表达式1) {
语句块1; }
else if(条件表达式2) {
语句块2; }
else {
语句块n; }

判断条件表达式1是否成立
=> 若成立,则执行语句块1;
=> 若不成立,则判断条件表达式2是否成立
=> 若成立,则执行语句块2;
=> 若不成立,则执行语句块n;

image.png

编程实现if else if else 来模拟购买火车票的过程

        // 1.提示用户输入身份信息并使用变量记录
        System.out.println("请输入您的身份信息:");
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        
        // 2.使用if  else if  else分支结构判断身份信息并给出对应的提示
        // 判断"军人"是否等于str,是否与str的数值相等
        if("军人".equals(str)) {
            System.out.println("请免费乘车!");
        } else if("学生".equals(str)) {
            System.out.println("请购买半价票!");
        } else {
            System.out.println("请购买全价票!");
        }
        
        // 3.打印一句话
        System.out.println("坐上了火车去拉萨,去看那美丽的布达拉!");
    }

image.png

switch case分支结构

语法结构

switch(变量/表达式) {

case 字面值1: 语句块1; break;
case 字面值2: 语句块2; break;
...
default:语句块n;
}

  计算变量/表达式的数值 => 判断是否匹配字面值1
  => 若匹配,则执行语句块1 => 执行break跳出当前结构
  => 若不匹配,则判断是否匹配字面值2
  => 若匹配,则执行语句块2 => 执行break跳出当前结构
  => 若不匹配,则执行语句块n

image.png

switch()中支持的数据类型有:byte、short、char以及int类型,从jdk1.5
开始支持枚举类型,从jdk1.7开始支持String类型。

注意:当default在最后时,break可以省略;当default没在最后时就不能省略break

编程使用switch case分支判断考试成绩所在的等级

        // 1.提示用户输入考试成绩并使用变量记录  0 ~ 100
        System.out.println("请输入您的考试成绩:");
        Scanner sc = new Scanner(System.in);
        int score = sc.nextInt();
        
        // 2.使用switch case分支结构实现考试成绩的等级判断
        switch(score / 10) {
            case 10: //System.out.println("等级A"); //break;
            case 9:  System.out.println("等级A"); break; // case穿透  
            case 8:  System.out.println("等级B"); break;
            case 7:  System.out.println("等级C"); break;
            case 6:  System.out.println("等级D"); break;
            default: System.out.println("等级E"); //break;
        }
        
        // 3.打印一句话
        System.out.println("世界上最痴情的等待就是我当case你当switch,或许永远都不会选到自己!");

image.png

循环结构的概念

  • 在Java程序中若希望重复执行一段代码时,就需要使用循环结构。
  • 任何复杂的程序逻辑都可以通过顺序、分支、循环三种程序结构实现。


    image.png

for循环的概念和使用

语法格式

for(初始化表达式;条件表达式;修改初始表达式){
    循环体;
}

执行初始化表达式 => 判断条件表达式是否成立
=> 成立则执行循环体 => 修改初始值表达式 => 判断条件是否成立
=> 若不成立,则循环结束

image.png

模拟完游戏的过程,玩够十局就结束


        for(int i = 1; i <= 10; i++) { // i = i + 1  => i += 1  => i++
            System.out.println("今晚吃鸡,大吉大利,正在进行第" + i + "场游戏...");
            Thread.sleep(5000); // 表示模拟睡眠5秒的效果
            System.out.println("本场游戏结束!\n\n\n");
        }
        
        System.out.println("该休息了,否则明天早上就要迟到了!");

题目案例:
使用for循环打印三位数中所有水仙花数。
所谓“水仙花数”即一个整数满足其值等于各个数位的立方和。
如:153是一个水仙花数,153=1^3 + 5^3 +3^3。

        // 1.使用for循环打印所有的三位数
        for(int i = 100; i <= 999; i++) {
            
            // 3.拆分三位数中的各个数位上的数字
            // 123 / 100 = 1;        123 % 100 => 23 / 10 = 2;    123 % 10 = 3;
            int ia = i / 100;      // 拆分百位数
            int ib = i % 100 / 10; // 拆分十位数
            int ic = i % 10;       // 拆分个位数
            
            // 2.针对每个三位数都要判断该数是否为水仙花数,若是则打印,否则不打印
            // 判断该数是否等于各个数位的立方和
            if((ia*ia*ia + ib*ib*ib + ic*ic*ic) == i) {
                System.out.println("i = " + i);
            }
        }

continue关键字

continue语句用在循环体中,用于结束本次循环而开始下一次循环。

案例:
使用for循环打印1 ~ 20之间的所有整数,若遇到5的倍数则跳过不打印。

        // 1.使用for循环打印1 ~ 20之间的所有整数
        for(int i = 1; i <= 20; i++) {
            // 若遇到5的倍数则跳过不打印该数,转而继续打印下一个数
            if(0 == i % 5) {
                continue; // 表示提前结束本次循环,继续下一次循环,也就是奔向了i++
            }
            System.out.println("i = " + i);
        }

break关键字

break用于退出当前语句块,break用在循环体中用于退出循环。
for(;;) - 这种没有循环条件的循环叫做 无限循环,俗称“死循环”。

案例:
不断地提示用户输入聊天内容并输出,直到用户输入”bye”结束聊天。

        // 5.声明一个boolean类型的变量作为发送方的标志
        boolean flag = true;
        
        // 4.使用无限循环来模拟不断地聊天
        for(;;) {
            // 1.提示用户输入要发送的聊天内容并使用变量记录
            System.out.println("请" + (flag? "张三": "李四") +"输入要发送的聊天内容:");
            Scanner sc = new Scanner(System.in);
            String str = sc.next();
            
            // 2.判断用户输入的内容是否为"bye",若是则聊天结束
            if("bye".equals(str)) {
                System.out.println("聊天结束!");
                break; // 用于跳出当前循环
            }
            // 3.若不是则打印用户输入的聊天内容
            //else {
                //System.out.println("聊天内容是:" + str);
            //}
            System.out.println((flag? "张三说:": "李四说:") + str + "\n\n\n");
            flag = !flag;
        }

双重for循环

语法格式

for(初始化表达式1; 条件表达式2; 修改初始值表达式3) {
    for(初始化表达式4; 条件表达式5; 修改初始值表达式6) {
循环体;
  }
}

执行表达式1 => 判断表达式2是否成立
=> 若成立,则执行表达式4 => 判断表达式5是否成立
=> 若成立,则执行循环体 => 执行表达式6 => 表达式5是否成立
=> 若不成立,则内层循环结束 => 表达式3 => 表达式2是否成立
=> 若不成立,则外层循环结束

双重for循环的特点

  • 外层循环用于控制打印的行数,内层循环用于控制打印的列数,外层循
    环改一下,内层循环从头到尾跑一圈。
  • 在以后的开发中若需要打印多行多列时,需要使用双重循环。
  • 多重循环不宜嵌套太多层,否则效率很低。一般到三重循环即可,最常
    见的就是双重循环。

案例:打印星星形状

image.png

        // 1.打印第一个星星图案
        // 外层循环主要用于控制打印的行数
        for(int i = 1; i <= 5; i++) {
            // 内层循环主要用于控制打印的列数
            for(int j = 1; j <= 5; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        
        System.out.println("--------------------------------------------");
        // 2.打印第二个星星图案
        // 外层循环主要用于控制打印的行数
        for(int i = 1; i <= 5; i++) {
            // 内层循环主要用于控制打印的列数  也就是当前行的列数与当前行的行数是相等关系
            for(int j = 1; j <= i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        
        System.out.println("--------------------------------------------");
        // 3.打印第三个星星图案
        // 外层循环主要用于控制打印的行数
        for(int i = 1; i <= 5; i++) {
            // 内层循环主要用于控制打印的列数  也就是当前行的列数与当前行的行数相加为6的关系
            for(int j = 1; j <= 6-i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        
        System.out.println("--------------------------------------------");
        // 4.打印第四个星星图案
        // 外层循环主要用于控制打印的行数
        for(int i = 1; i <= 5; i++) {
            // 控制空格的个数
            for(int j = 1; j <= 5-i; j++) {
                System.out.print(" ");
            }
            // 内层循环主要用于控制打印的列数  也就是当前行的列数与当前行的行数为 2*i-1 的关系
            for(int j = 1; j <= 2*i-1; j++) {
                System.out.print("*");
            }
            System.out.println();
        }

案例:使用双重for循环打印九九乘法表

        // 1.使用外层for循环控制打印的行数,一共9行
        for(int i = 1; i <= 9; i++) {
            // 2.使用内层for循环控制打印的列数,最多9列,规律是:与当前行所在的行数相等
            for(int j = 1; j <= i; j++) {
                // 3.使用两个循环变量来拼接等式
                System.out.print(j + "*" + i + "=" + j*i + " ");
            }
            System.out.println();
         }

总结:使用双重for循环时,外层循环代表的是需要打印的行数,内层循环代表的是需要打印的行数;并且外层循环控制换行,内存循环控制输出

break关键字跳出多层循环

  • 在嵌套的循环结构中,break用于退出所在循环体。
  • 如果要退出外层循环体,需要使用标号的方式。
outer: for (...) {
 for(...) {
    break outer;
  } 
} 

案例:当我们打印九九乘法表只需要打印到六就结束

        // 1.使用外层for循环控制打印的行数,一共9行
        outer:for(int i = 1; i <= 9; i++) {
            // 2.使用内层for循环控制打印的列数,最多9列,规律是:与当前行所在的行数相等
            for(int j = 1; j <= i; j++) {
                // 3.使用两个循环变量来拼接等式
                System.out.print(j + "*" + i + "=" + j*i + " ");
                // 4.当打印完毕6*6 = 36后结束整个打印
                if(6 == j) {
                    //break; // 主要用于跳出循环,但该关键字只能跳出当前所在的循环
                    break outer; // 表示可以跳出外层for循环
                }
            }
            System.out.println();
        }
image.png

while循环

语法格式

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

判断条件表达式是否成立
=> 若成立,则执行循环体 => 判断条件表达式是否成立
=> 若不成立,则循环结束
image.png

while循环和for循环比较

  • while循环和for循环完全可以互换,当然推荐使用for循环。
  • while循环更适合于明确循环条件但不明确循环次数的场合中。
  • for循环更适合于明确循环次数或范围的场合中。
  • while(true) 等价于 for(;;) 都表示无限循环。

do while循环

语法格式

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

执行循环体 => 判断条件表达式是否成立
=> 若成立,则执行循环体 => 判断条件表达式是否成立
=> 若不成立,则循环结束

image.png

do-while循环主要用于至少执行一次循环体的场合中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容