Java程序控制结构,一文带你彻底拿下~

news2024/11/27 0:46:55

—— 程序的运行流程控制会解决程序是如何执行的

三大程序流程控制结构

        1)顺序结构:程序从上到下逐行逐行的执行,中间没有任何的判断和跳转

        2)分支结构:程序具有选择性的进入某一段代码

        3)循环结构:程序重复的执行某一段代码

思维导图

 

一.if分支结构

1.什么叫做分支结构

        ——程序有选择性的执行某一段代码,使程序具有选择性

2.if分支结构形式

1)单分支:if (条件表达式)

2)双分支:if (条件表达式) else

3)多分支:if (条件表达式) else if (条件表达式) else if (条件表达式) …… else

3.一个小case快速了解if分支结构

public class Test {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;

        //单分子
        if (a > b) {
            System.out.println("a > b");
        }

        //双分支
        if (a < b) {
            System.out.println("a < b");//a < b
        } else {
            System.out.println("a > b");
        }

        //多分支
        if (a > b) {
            System.out.println("a > n");
        } else if (a < b) {
            System.out.println("a < b");//a < b
        } else {
            System.out.println("a == b");
        }
    }
}

4.分支语句详解

1)单分支形式:if (条件表达式) { 代码块; }

解释:条件表达式为true,则执行if语句里面的代码块,若是条件表达式为false,就跳过if语句,执行if (){ }后面的语句

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        //单分支的实现
        int num1 = 0;
        int num2 = 0;

        Scanner sc = new Scanner(System.in);//输入条件
        //给num1,num2输入值
        num1 = sc.nextInt();
        num2 = sc.nextInt();

        //单分支
        if (num1 > num2) {
            System.out.println(num1 + ">" + num2);
        }
        if (num1 < num2) {
            System.out.println(num1 + "<" + num2);
        }
    }
}

2)双分支形式:if (条件表达式) { 代码块; } else { 代码块; }

解释:如果if的条件表达式为true,则执行if中的代码块,如果if的条件表达式为false,则执行else中的代码块

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        //双分支的实现
        int num1 = 0;
        int num2 = 0;

        Scanner sc = new Scanner(System.in);//输入条件
        //给num1,num2输入值
        num1 = sc.nextInt();
        num2 = sc.nextInt();

        //双分支
        if (num1 > num2) {
            System.out.println(num1 + ">" + num2);
        } else {
            System.out.println(num1 + "<" + num2);
        }
    }
}

3)多分支形式:

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

解释:那个的条件表达式为true,则执行那个分支的语句块,如果都为false,则执行else中的语句块

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        //多分支的实现
        int num1 = 0;
        int num2 = 0;
        int num3 = 0;

        Scanner sc = new Scanner(System.in);//输入条件
        //给num1,num2输入值
        num1 = sc.nextInt();
        num2 = sc.nextInt();
        num3 = sc.nextInt();

        //多分支
        if (num1 > num2) {
            System.out.println(num1 + ">" + num2);
        } else if (num1 > num3) {
            System.out.println(num1 + ">" + num3);
        } else if (num2 > num3) {
            System.out.println(num2 + ">" + num3);
        } else {
            System.out.println("hehe");
        }
    }
}

4)分支嵌套

在if语句里面含有if语句,再在if语句里面有if语句,……;在else语句里面含有if语句……(注意:最后不要嵌套超过3层,可读性不好)

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        //分支嵌套的实现
        int data1 = 0;
        int data2 = 0;
        int data3 = 0;

        Scanner sc = new Scanner(System.in);//输入条件
        //给num1,num2输入值
        data1 = sc.nextInt();
        data2 = sc.nextInt();
        data3 = sc.nextInt();

        //分支嵌套
        if (data1 > data2) {
            if (data1 > data3) {
                System.out.println("最大值是:" + data1);
            } else {
                System.out.println("最大值是:" + data3);
            }
        } else {
            if (data2 > data3) {
                System.out.println("最大值是:" + data2);
            } else {
                System.out.println("最大值是:" + data3);
            }
        }
    }
}

 

 

二.switch分支结构

1.switch的语法规则

switch (表达式) {
    case 常量1:
        语句块;
        break;
    case 常量2:
        语句块;
        break;
    case 常量3:
        语句块;
        break;
    ……
    default:
        语句块;
        break;//default后加上break养成好习惯
}
    

解释:
    1)switch (表达式)中的表达式匹配对应的一个值,用于和case中的值匹配
    2)case 常量:当表达式的值等于常量,则执行case对应的语句块
    3)break: 表示退出switch语句
    4)如果表达式没有和任何一个case匹配上,则执行default语句

2.一个小case快速了解switch语句

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        //switch的使用
        int today = 0;

        //输入
        Scanner sc = new Scanner(System.in);
        today = sc.nextInt();

        switch (today) {
            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;
        }
    }
}

3.switch的细节讨论

1)switch中的表达式类型应和case后面的常量类型一致,或者是可以自动转换成可以相互比较的类型 

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        //switch中的表达式类型应和case后面的常量类型一致,或者是可以自动转换成可以相互比较的类型
        char ch = 0;

        //输入
        Scanner sc = new Scanner(System.in);
        ch = sc.next().charAt(0);//获取字符串的第一个字符

        switch (ch) {
            //char类型自动转换成int类型进行比较
            case 97:
                System.out.println("a");
                break;
            case 98:
                System.out.println("b");
                break;
            case 99:
                System.out.println("c");
                break;
            case 100:
                System.out.println("d");
                break;
            case 101:
                System.out.println("e");
                break;
            default:
                System.out.println("其他字符:" + ch);
                break;
        }
    }
}

2)switch(表达式)中的值类型必须是:byte、short、int、char、enum、String类型 

public class Test {
    public static void main(String[] args) {
        //switch (表达式)中表达式的返回值必须是:byte、short、int、char、enum、String类型
        byte b = 0;
        short s = 0;
        int num = 0;
        char ch = 0;
        String str = "abc";

        switch (b) {}//正确
        switch (s) {}//正确
        switch (num) {}//正确
        switch (ch) {}//正确
        switch (str) {}//正确

        //不能使用的类型:float、double、long等
        long data = 0;
        float f = 1.3f;
        double db = 1.45;
        //switch(f) {} //错误
        //switch(db) {} //错误
        //switch(data) {} //错误
    }
}

3)case 紧跟的值必须是常量,不能是变量或浮点类型 

public class Test {
    public static void main(String[] args) {
        //case 紧跟的值必须是常量,不能是变量或浮点类型
        int num = 10;
        int data = 11;
        double f = 13.14;

        switch (num) {
            //case data: //case后面不能跟变量
            //case f: //case后面不能跟变量

            //case 13.14: //case后面不能跟浮点类型
        }
    }
}

4)default语句可省略,在所有的case语句都没有匹配成功的情况下,执行default语句

5)break语句用来执行完一个case分支后跳出switch语句块,如果没有写break语句,程序会顺序执行到switch的结尾或执行到有break的case分支语句

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        //break语句用来执行完一个case分支后跳出switch语句块
        //如果没有写break语句,程序会顺序执行到switch的结尾或执行到有break的case分支语句
        int season = 0;

        //输入
        Scanner sc = new Scanner(System.in);
        season = sc.nextInt();

        switch (season) {
            case 12:
            case 1:
            case 2:
                System.out.println("冬季");
                break;
            case 3:
            case 4:
            case 5:
                System.out.println("春季");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println("夏季");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println("秋季");
                break;
            default:
                System.out.println("月份有误,请检查!!!");
                break;
        }
    }
}

 

4.switch和if的比较 

1)配对比较,而且符合byte、short、int、char、enum、String6种类型,建议使用switch语句

2)区间判断,结果是boolean类型的数据,使用if分支语句

 

 

三.循环结构 

1.什么是循环结构

        ——程序中循环的执行某些代码,使用while、do-while、for进行循环

2.循环结构的格式

while(循环条件) {
    //循环代码块
}

do {
    //循环代码块
}while(循环条件);

for(循环初始化; 循环条件; 循环变量迭代) {
    //循环代码块
}

3.一个小case快速了解循环结构

public class Test {
    public static void main(String[] args) {
        //while循环
        int i = 1;
        while (i <= 10) {
            System.out.print(i + "\t");
            i++;
        }
        System.out.println();

        //do-while循环
        i = 1;
        do {
            System.out.print(i + "\t");
            i++;
        } while (i <= 10);
        System.out.println();

        //for循环
        for (i = 1; i <= 10; i++) {
            System.out.print(i + "\t");
        }
    }
}

4.循环四要素

1)循环语句

2)循环体

3)循环判断

4)循环变量迭代

public class Test {
    public static void main(String[] args) {
        //while循环
        int i = 1;//循环变量
        //循环判断
        while (i <= 10) {
            //循环体
            System.out.print(i + "\t");
            i++;//循环变量迭代
        }
        System.out.println();
    }
}

5.while、do-while循环的细节讨论

1)当循环条件为假(false)时,循环中的循环体不执行,循环条件为真(true)时,执行循环中的循环体 

public class Test {
    public static void main(String[] args) {
        //while循环
        int i = 11;//循环变量
        //循环条件为false,不执行循环体
        while (i <= 10) {
            //循环体
        }

        //条件为true
        while (i < 15) {
            System.out.print(i + "\t");
            i++;
        }
        System.out.println();
    }
}

2)do-while循环先执行后判断

3)break在while、do-while中的作用:跳出循环,执行循环后面的语句

public class Test {
    public static void main(String[] args) {
        //while循环
        int i = 1;
        while (i <= 10) {
            if (i == 5)
                break;//跳出循环
            System.out.print(i + "\t");//1 2 3 4
            i++;
        }
        System.out.println();//换行

        i = 1;
        do {
            if (i == 5)
                break;//跳出循环
            System.out.print(i + "\t");//1 2 3 4
            i++;
        } while (i <= 10);
    }
}

4)continue在while、do-while中的作用:跳过本次循环,执行下一次循环

5)while循环常使用在不知循环次数的情况下

public class Test {
    public static void main(String[] args) {
        //while循环
        int i = 1;
        while (i <= 10) {
            if (i == 5)
                continue;//跳过本次循环
            System.out.print(i + "\t");//1 2 3 4 死循环
            i++;
        }
        System.out.println();//换行
    }
}

6.for循环的细节讨论

1)for循环的循环变量只初始化一次

2)break在for循环中的作用:跳出循环,执行循环后的语句

public class Test {
    public static void main(String[] args) {
        for (int i = 1; i < 10; i++) {
            if (i == 5)
                break;
            System.out.print(i + " ");// 1 2 3 4
        }
    }
}

3)continue在for循环中的作用:跳过本次循环,但是循环变量迭代依然要执行

4)for循环使用在易知道循环次数的情况下 

public class Test {
    public static void main(String[] args) {
        for (int i = 1; i < 10; i++) {
            if (i == 5)
                continue;
            System.out.print(i + " ");// 1 2 3 4 6 7 8 9
        }
    }
}

 

7.三种循环的区别

1)do-while循环先使用后执行

2)三种循环都有循环四要素

3)三种循环都需要使用条件判断

4)循环表达式判断的结果都是boolean型

8.多重循环的使用

1)打印金字塔 

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        int len = 0;
        //输入
        Scanner sc = new Scanner(System.in);
        len = sc.nextInt();

        //金字塔
        for (int i = 0; i < len; i++) {
            for(int j = 0; j < len - i; j++) {
                System.out.print(" ");
            }
            for (int j = 0; j <= i; j++) {
                System.out.print('*' + " ");
            }
            System.out.println();
        }
    }
}

2)九九乘法表 

public class Test {
    public static void main(String[] args) {
        //乘法表
        int len = 0;
        //输入
        Scanner sc = new Scanner(System.in);
        len = sc.nextInt();

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

3)登录验证 

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String user = "林沐雨";
        String passwd = "123456";
        String loginUser = "";
        String loginPasswd = "";

        //登录判断
        for (int i = 1; i <= 3; i++) {
            //输入
            System.out.println("请输入用户名:");
            loginUser = sc.next();
            System.out.println("请输入密码:");
            loginPasswd = sc.next();

            if (loginUser.equals(user)) {
                if (loginPasswd.equals(passwd)) {
                    System.out.println("登录成功~");
                    break;
                } else {
                    if (3 - i == 0) {
                        System.out.println("账户已锁定,请稍微再试");
                        break;
                    }
                    System.out.println("密码错误,你还有" + (3 - i) + "次机会");
                }
            } else {
                if (3 - i == 0) {
                    System.out.println("账户已锁定,请稍微再试");
                    break;
                }
                System.out.println("用户名错误,你还有" + (3 - i) + "次机会");
            }
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/867417.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL Developer中的Data Redaction

SQL Developer中的Data Redaction用起来比命令行方便多了。可以选定表或视图&#xff0c;右键点击“遮盖保护”菜单。 但赋权方面有需要注意的地方。 假设Redact Admin是SYS&#xff0c;Redact User是HR。虽然SYS具备所有权限&#xff0c;但还是报以下错误。其实这个错误是针…

jvm——垃圾回收机制(GC)详解

开始之前有几个GC的基本问题 什么是GC&#xff1f; GC 是 garbage collection 的缩写&#xff0c;意思是垃圾回收——把内存&#xff08;特别是堆内存&#xff09;中不再使用的空间释放掉&#xff1b;清理不再使用的对象。 为什么要GC&#xff1f; 堆内存是各个线程共享的空间…

spring常用注解标签总结

1&#xff1a;Component等 名称Component/Controller/Service/Repository类型类注解位置类定义上方作用设置该类为spring管理的bean属性value&#xff08;默认&#xff09;&#xff1a;定义bean的id 说明: Component注解如果不起名称&#xff0c;会有一个默认值就是当前类名首…

IDEA提示:StringBuffer xxx‘ may be declared as ‘StringBuilde

如图所示&#xff0c;编写代码时遇见了如下IDEA警告&#xff1a; 原因&#xff1a;StringBuilder是线程不安全的&#xff0c;但是其效率高&#xff0c;而StringBuffer则相反&#xff0c;虽然其线程安全&#xff0c;但是效率低下。 由于 StringBuilder 相较于 StringBuffer 有速…

Java+Excel+POI+testNG基于数据驱动做一个简单的接口测试【杭州多测师_王sir】

一、创建一个apicases.xlsx放入到eclipse的resource里面&#xff0c;然后refresh刷新一下 二、在pom.xml文件中加入poi和testng的mvn repository、然后在eclipse的对应目录下放入features和plugins&#xff0c;重启eclipse就可以看到testNG了 <!--poi excel解析 --><d…

音视频研发分享:关键帧截图+wasm快照--我又做了一件有益于社会的事情

音视频研发分享&#xff1a;关键帧截图wasm快照--我又做了一件有益于社会的事情 简单的一个视频设备快照功能到底有多费事多费电&#xff1f;新的方法有方法&#xff01; 省了多少电&#xff1f; 简单的一个视频设备快照功能到底有多费事多费电&#xff1f; 以前&#xff0c;我…

【C# 基础精讲】构造函数和析构函数

构造函数&#xff08;Constructor&#xff09;和析构函数&#xff08;Destructor&#xff09;是面向对象编程中的两个重要概念&#xff0c;它们分别用于在对象创建和销毁的时候执行特定的操作。这两个函数在C#以及其他面向对象编程语言中都具有重要的作用&#xff0c;用于初始化…

机器学习笔记:李宏毅chatgpt 大模型 大资料

1 大模型 1.1 大模型的顿悟时刻 Emergent Abilities of Large Language Models&#xff0c;Transactions on Machine Learning Research 2022 模型的效果不是随着模型参数量变多而慢慢变好&#xff0c;而是在某一个瞬间&#xff0c;模型“顿悟”了 这边举的一个例子是&#…

剪映:制作特效的常用方法

在创作短视频时&#xff0c;常常需要为一些镜头添加或制作特效&#xff0c;以增加趣味性、提升影片的艺术渲染力。本文介绍几种在剪映专业版中快速添加或制作特效的常用方法。 一、使用特效库 在“特效”库中提供了大量的特效供下载使用。找到自己中意的特效&#xff0c;直接拖…

alphassl便宜通配符SSL证书推荐

AlphaSSL是一家提供SSL证书的CA认证机构&#xff0c;其证书可以保护网站的安全性&#xff0c;防止黑客攻击和信息泄露。AlphaSSL的证书价格实惠&#xff0c;安全性高&#xff0c;AlphaSSL的证书还可以与各种服务器和网站平台兼容&#xff0c;包括Apache、IIS、Tomcat和Nginx等。…

【C# 基础精讲】类和对象的概念

在面向对象编程&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;中&#xff0c;类和对象是两个核心概念&#xff0c;用于描述和实现现实世界中的实体和关系。OOP 是一种编程范式&#xff0c;通过将数据和操作封装为对象来组织和管理代码&#xff0c;使得代…

大模型时代,如何重塑AI人才的培养?知名高校专家为您解答

当下&#xff0c;随着人工智能技术的快速发展&#xff0c;大模型已经成为了人工智能发展的新方向&#xff0c;同时也对新时代AI人才的需求和培养带来了新的思考与挑战&#xff0c;需要结合当下社会对复合型AI人才的需求进行新思考&#xff0c;创新AI人才培养模式&#xff0c;以…

基于frida检测demo来学习frida检测及anti

原文地址:https://www.zhuoyue360.com/crack/108.html 前言 随着逆向的攻防强度不断的提升,目前主流的移动安全厂商的加固服务基本上都已包含了常见Hook框架的反调试,我们最常见的hook工具如下: fridaxposed 为了更好的提升自己相关的经验,我们可以拿这类demo来进行原理的学…

如何限制运行时间的一则考虑

在日常使用中&#xff0c;会遇到限制过期时间的问题&#xff0c;但是&#xff0c;对于时间的判断&#xff0c;很难找到一个信任根&#xff01;如果没有信任根&#xff0c;这个问题其实无从判断。 从实用的角度来设计&#xff0c;我们假定可以找到一个相对可信的信任根&#xf…

从零实战SLAM-第三课(李群与李代数)

在七月算法报的班&#xff0c;老师讲的蛮好。好记性不如烂笔头&#xff0c;关键内容还是记录一下吧&#xff0c;课程入口&#xff0c;感兴趣的同学可以学习一下。 --------------------------------------------------------------------------------------------------------…

2023年中国负极石墨用坩埚市场规模现状及前景分析:负极材料为行业增长助推器[图]

负极石墨用坩埚分为再生坩埚和石墨匣钵&#xff0c;其中&#xff0c;再生坩埚主要应用于艾奇逊炉工艺的石墨化工序&#xff0c;石墨匣钵主要应用于预碳化和碳化工序。 负极石墨用坩埚分类 资料来源&#xff1a;共研产业咨询&#xff08;共研网&#xff09; 得益于动力电池的旺…

Git Cherry-pick使用

概述 无论项目大小&#xff0c;当你和一群程序员一起工作时&#xff0c;处理多个 Git 分支之间的变更都会变得很困难。有时&#xff0c;与其把整个 Git 分支合并到另一个分支&#xff0c;不如选择并移动几个特定的提交。这个过程被称为 "挑拣", 即 Cherry-pick。 本…

java获取到heapdump文件后,如何快速分析?

简介 在之前的OOM问题复盘之后&#xff0c;本周&#xff0c;又一Java服务出现了内存问题&#xff0c;这次问题不严重&#xff0c;只会触发堆内存占用高报警&#xff0c;没有触发OOM&#xff0c;但好在之前的复盘中总结了dump脚本&#xff0c;会在堆占用高时自动执行jstack与jm…

百度云盘发展历程与影响

摘要&#xff1a; 百度云盘作为中国领先的云存储与共享服务提供商&#xff0c;自其创立至今经历了多个阶段的发展与变革。本论文通过对百度云盘的历史回顾与分析&#xff0c;探讨了其在技术、商业模式、用户体验以及对社会的影响等方面的演变。同时&#xff0c;还分析了在竞争激…

谈谈Java开发语言

目录 1.概念 2.特点 3.应用领域 4.就业情况 1.概念 Java是一种面向对象的编程语言&#xff0c;它由James Gosling和他的团队在1995年于Sun Microsystems&#xff08;现在是Oracle Corporation&#xff09;开发出来。Java的设计目标是让开发者能够编写一次代码&#xff0c;在…