Java教程

day04_Java流程控制

本文主要是介绍day04_Java流程控制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

流程控制语句

在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。流程控制语句分类,如下所示

  • 顺序结构
  • 分支结构(if, switch)
  • 循环结构(for, while, do…while)

顺序结构

顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。

顺序结构执行流程图:

代码示例

public class Demo {
    public static void main(String[] args) {
        System.out.println(1);
        System.out.println(2);
        System.out.println(3);
        System.out.println(4);
        System.out.println(5);
    }
}

分支结构

根据不同的条件,执行不同的语句。在Java中分支结构又可以分为if语句和Switch语句。

if语句格式之单if

格式:

执行流程:

  1. 首先计算关系表达式的值
  2. 如果关系表达式的值为true就执行语句体
  3. 如果关系表达式的值为false就不执行语句体
  4. 继续执行后面的语句内容

执行流程图

代码示例

public class Demo {
    public static void main(String[] args) {
        System.out.println("开始");
        int age = 17;
        // 如果年龄大于18岁, 就可以上网吧
        if(age >= 18){
            // age > 18为true 执行的语句体
            System.out.println("可以上网吧");
        }
        System.out.println("结束");
    }
    
}

if语句格式之if ...else

格式:

执行流程:

  1. 首先计算关系表达式的值
  2. 如果关系表达式的值为true就执行语句体1
  3. 如果关系表达式的值为false就执行语句体2
  4. 继续执行后面的语句内容

代码示例

public class Demo {
    public static void main(String[] args) {
        // 程序判断一个数, 是奇数还是偶数
        int num = 9;
        
        if(num % 2 == 0){
            System.out.println("偶数");
        }else{
            System.out.println("奇数");
        }
    }
}

if语句格式之if ...else if ...else

格式

执行流程:

  1. 首先计算关系表达式1的值
  2. 如果值为true就执行语句体1;如果值为false就计算关系表达式2的值
  3. 如果值为true就执行语句体2;如果值为false就计算关系表达式3的值
  4. 如果没有任何关系表达式为true,就执行语句体n+1。

执行流程图

代码示例

import java.util.Scanner;

/*
需求:小明快要期末考试了,小明爸爸对他说,会根据他不同的考试成绩,送他不同的礼物
假如你可以控制小明的得分,请用程序实现小明到底该获得什么样的礼物,并在控制台输出。
 */
public class Demo {
    public static void main(String[] args) {
        // 1. 使用Scanner录入考试成绩
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的成绩:");
        int score = sc.nextInt();
        // 2. 判断成绩是否在合法范围内 0~100
        if (score >= 0 && score <= 100) {
            // 合法成绩
            // 3. 在合法的语句块中判断成绩范围符合哪一个奖励
            if (score >= 95 && score <= 100) {
                System.out.println("自行车一辆");
            } else if (score >= 90 && score <= 94) {
                System.out.println("游乐场一次");
            } else if (score >= 80 && score <= 89) {
                System.out.println("变形金刚一个");
            } else {
                System.out.println("挨顿揍, 这座城市又多了一个伤心的人~");
            }
        } else {
            // 非法的话, 给出错误提示
            System.out.println("您的成绩输入有误!");
        }
    }

}

注意事项:

  • 如果if语句所控制的语句体, 是一条语句, 大括可以省略不写但是强烈建议不神虐!

分支语句之switch语句

格式:

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

执行流程:

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

示例代码

import java.util.Scanner;

public class TestSwitch {
    /*
        需求:键盘录入星期数,显示今天的减肥活动。
    
        周一:跑步  
        周二:游泳  
        周三:慢走  
        周四:动感单车
        周五:拳击  
        周六:爬山  
        周日:好好吃一顿 

        分析:
            1. 键盘录入星期数据,使用变量接收
            2. 多情况判断,采用switch语句实现
            3. 在不同的case中,输出对应的减肥计划
    */
    public static void main(String[] args){
        // 1. 键盘录入星期数据,使用变量接收
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入");
        int week = sc.nextInt();
        // 2. 多情况判断,采用switch语句实现
        switch(week){
            // 3. 在不同的case中,输出对应的减肥计划
            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;
        }
    }
}

switch语句case穿透

概述 : 如果switch语句中,case省略了break语句, 就会开始case穿透

示例代码

import java.util.Scanner;

public class Demo {
    /*
        需求: 键盘录入星期数,输出工作日、休息日
        (1-5)工作日,(6-7)休息日
        
        
        case穿透是如何产生的?
        
            如果switch语句中,case省略了break语句, 就会开始case穿透.
        
        现象:
            当开始case穿透,后续的case就不会具有匹配效果,内部的语句都会执行
            直到看见break,或者将整体switch语句执行完毕,才会结束。

    */
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入星期数:");
        int week = sc.nextInt();
        
        switch(week){
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                System.out.println("工作日");
                break;
            case 6:
            case 7:
                System.out.println("休息日");
                break;
            default:
                System.out.println("您的输入有误");
                break;
        }
    }    
}

循环结构

循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复 执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形 成死循环。一般情况下,循环的组成如下所示:

  • 初始化语句: 用于表示循环开启时的起始状态,简单说就是循环开始的时候什么样
  • 条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去
  • 循环体语句: 用于表示循环反复执行的内容,简单说就是循环反复执行的事情
  • 条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去

循环语句之for循环

for循环格式:

执行流程:

  1. 执行初始化语句
  2. 执行条件判断语句,看其结果是true还是false。如果是false,循环结束。如果是true,继续执行
  3. 执行循环体语句
  4. 执行条件控制语句
  5. 回到②继续

代码示例

//在控制台输出所有的“水仙花数” 。水仙花数,指的是一个三位数,个位、十位、百位的数字立方和等于原数
public class Demo {
    /*
        需求:在控制台输出所有的“水仙花数”,要求每行打印2个
        System.out.print (打印内容);    打印后不换行
        System.out.println(打印内容);    打印后换行

        分析:       
            1. 定义变量count,用于保存“打印过”的数量,初始值为0
            2. 在判定和打印水仙花数的过程中,拼接空格, 但不换行,并在打印后让count变量+1,记录打印过的数量
            3. 在每一次count变量+1后,判断是否到达了2的倍数,是的话,换行。

    */
    public static void main(String[] args) {
        // 1. 定义变量count,用于保存“打印过”的数量,初始值为0
        int count = 0;
        for (int i = 100; i <= 999; i++) {
            int ge = i % 10;
            int shi = i / 10 % 10;
            int bai = i / 10 / 10 % 10;

            if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i) {
                //  2. 在判定和打印水仙花数的过程中,拼接空格, 但不换行,并在打印后让count变量+1,记录打印过的数量
                System.out.print(i + " ");
                count++;
                // 3. 在每一次count变量+1后,判断是否到达了2的倍数,是的话,换行
                if (count % 2 == 0) {
                    System.out.println();
                }
            }
        }
    }
}

总结:今后如果需求带有统计xxx,请先想到计数器变量.计数器变量定义的位置,必须在循环外部

循环语句之while循环

 while循环完整格式

 

while循环执行流程:

  1. 执行初始化语句
  2. 执行条件判断语句,看其结果是true还是false。如果是false,循环结束。如果是true,继续执行
  3. 执行循环体语句
  4. 执行条件控制语句
  5. 回到②继续

示例代码

/*
世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,
它的厚度是0.1毫米。请问,我折叠多少次,可以折成珠穆朗玛峰的高度?
 */
public class Demo {
    public static void main(String[] args) {
        //定义一个计数器,初始值为0
        int count = 0;
        //定义纸张厚度
        double paper = 0.1;
        //定义珠穆朗玛峰的高度
        int zf = 8844430;
        //因为要反复折叠,所以要使用循环,但是不知道折叠多少次,这种情况下更适合使用while循环
        //折叠的过程中当纸张厚度大于珠峰就停止了,因此继续执行的要求是纸张厚度小于珠峰高度
        while(paper <= zf) {
            //循环的执行过程中每次纸张折叠,纸张的厚度要加倍
            paper *= 2;
            //在循环中执行累加,对应折叠了多少次
            count++;
        }
        //打印计数器的值
        System.out.println("需要折叠:" + count + "次");
    }
}

循环语句之dowhile循环

完整格式:

执行流程:

  1. 执行初始化语句
  2. 执行循环体语句
  3. 执行条件控制语句
  4. 执行条件判断语句,看其结果是true还是false。如果是false,循环结束。如果是true,继续执行
  5. 回到②继续

代码示例

public class Demo {
    //需求:在控制台输出5次"HelloWorld"
    public static void main(String[] args) {
        //do...while循环实现
        int j = 1;
        do {
            System.out.println("HelloWorld");
            j++;
        } while (j <= 5);
        
    }
}

三种循环的区别

  • for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
  • do...while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)

for循环和while的区别

  • 条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
  • 条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用

死循环

格式:

注意: 无法访问的语句不能编写,否则会报错

跳转控制语句

跳转控制语句(break)

跳出循环,结束循环

public class Demo {
    /*
        break : 终止循环体内容的执行
        注意:使用是基于条件控制的
                break语句只能在循环和switch中进行使用.
                
        需求: 模拟20岁工作到80岁, 60岁退休.
    */
    public static void main(String[] args){
        for(int i = 20; i <= 80; i++){
            if(i == 60){
                break;        // 结束整个循环
            }
            System.out.println(i + "岁正在上班");
        }
    }
    
}

跳转控制语句(continue)

跳过本次循环,继续下次循环

public class Demo {
    /*
        continue : 跳过某次循环体内容的执行
        
        注意:使用是基于条件控制, 在循环内部使用.
        
        需求: 模拟电梯上行的过程 1-24层, 4层不停.
    */
    public static void main(String[] args){
        for(int i = 1; i <= 24; i++){
            if(i == 4){
                continue;
            }
            System.out.println(i + "层到了~");
        }
    }
    
}

综合练习

import java.util.Scanner;
import java.util.Random;

public class Test {
    /*
        需求:程序自动生成一个1-100之间的数字,使用程序实现猜出这个数字是多少?
            当猜错的时候根据不同情况给出相应的提示
            如果猜的数字比真实数字大,提示你猜的数据大了
            如果猜的数字比真实数字小,提示你猜的数据小了
            如果猜的数字与真实数字相等,提示恭喜你猜中了
        
        1. 准备Random和Scanner对象, 分别用于产生随机数和键盘录入
        2. 使用Random产生一个1-100之间的数, 作为要猜的数
        3. 键盘录入用户猜的的数据
        4. 使用录入的数据(用户猜的数据)和随机数(要猜的数据)进行比较, 并给出提示
        
        5. 以上内容需要多次进行, 但无法预估用户输入几次可以猜测正确, 使用while(true)死循环包裹
        6. 猜对之后, break结束.

    */
    public static void main(String[] args){
        // 1. 准备Random和Scanner对象, 分别用于产生随机数和键盘录入
        Random r = new Random();
        Scanner sc = new Scanner(System.in);
        // 2. 使用Random产生一个1-100之间的数, 作为要猜的数
        int randomNum = r.nextInt(100) + 1;
        
        // 5. 以上内容需要多次进行, 但无法预估用户输入几次可以猜测正确, 使用while(true)死循环包裹
        while(true){
            // 3. 键盘录入用户猜的的数据
            System.out.println("请输入您猜的数据:");
            int num = sc.nextInt();
            // 4. 使用录入的数据(用户猜的数据)和随机数(要猜的数据)进行比较, 并给出提示
            if(num > randomNum){
                System.out.println("猜大了");
            }else if(num < randomNum){
                System.out.println("猜小了");
            }else{
                // 6. 猜对之后, break结束.
                System.out.println("恭喜,猜中了");
                break;
            }
        }
        
        System.out.println("感谢您的使用");
        
    }
}
这篇关于day04_Java流程控制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!