当前位置: 首页 > news >正文

【Java】逻辑控制

当你停下脚步

别忘了别人还在奔跑


目录

1.程序控制语句分类 

2.顺序结构 

2.选择结构

2.1 if 选择语句

2.2 switch 选择语句

3.循环结构 

3.1 while 循环语句 

3.2 break

3.3 continue 

3.4 for 循环

3.5 do...while 循环 

4.输入输出 

4.2 输入 


1.程序控制语句分类 

Java中一共有三大结构,分别是 顺序结构、选择结构、循环结构

  1. 顺序结构:按顺序依次执行的
  2. 选择结构:因为选择的不同,对应的结果也是不同的
  3. 循环结构:重复做着某一件事情,直到条件不满足才会终止循环

2.顺序结构 

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

按照代码的顺序一行一行的执行就是顺序结构

如果代码的顺序发生改变了,那么执行的顺序也会发生对应个改变

2.选择结构

选择结构又叫做分支结构,因为选择的不同最后的执行的选择体中的代码也不同。假设小美去买彩票,如果她买的彩票号码与中奖彩票号码一样则小美中奖,否则小美不中奖

选择结构一共有两种语句一个是 if 语句,还有一个是 switch 语句 

2.1 if 选择语句

①单独的 if 语句

public class Test {
    public static void main(String[] args) {
        int a = 10;
        if(a == 10) {
            System.out.println("中奖");
        }
        System.out.println(a);
    }
}

打印结果: 

如果 if 后面的条件判断语句为真,则执行 if 语句体,也就是打印中奖。如果为假,则不执行 if 语句体

注:不管执不执行 if 语句体,if 语句体以外的语句都要执行。也就是不管执不执行 if 语句体,都要打印 a 的值

② if...else... 语句

public class Test {
    public static void main(String[] args) {
        int a = 10;
        if(a == 10) {
            System.out.println("中奖");
        } else {
            System.out.println("没中奖");
        }
    }
}

执行结果: 

如果 if 后面的条件判断语句为真,则执行 if 语句体否则执行 else 语句体

注:if 语句体 和 else 语句体不会都执行,只会执行其中一个 

③ if...else if...else 多层判断选择语句

public class Test {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        if(a == 10) {
            System.out.println("a中奖");
        } else if(b == 20) {
            System.out.println("b中奖");
        } else {
            System.out.println("没中奖");
        }
    }
}

 执行结果:

如果 if 后面的条件判断语句为真,则执行 if 语句体 。否则判断 else if 后面的条件判断语句是否为真,如果为真则执行 else if 语句体,否则执行 else 语句

注:多层判断选择语句也只会执行其中的一个语句体

if 选择语句注意事项

注意1:分号问题

这个代码还是会打印 a中奖,但是这并不是在选择语句体中打印的,造成的原因就是 if 判断语句后面的那个分号。if 后面的条件判断语句为真,则执行 if 后面的一条语句。所有语句被 {} 花括号的括起来称为语句体,被视为一条语句。分号默认是一条语句的结束标志,当 if 后面的条件判断语句为真当准备执行 if 后面的一条语句的时候,发现是分号,也就表示已执行完,其实执行的就是空语句

注意2:悬垂 else 问题

public class Test {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        if (a == 6)
            if(a == 5)
                System.out.println("yes");
        else
                System.out.println("no");
    }
}

问题:else 与哪个 if 匹配? 

答:if / else 语句中可以不加 大括号,也可以写语句(只能写一条语句)。此时 else 是和最接近的 if 匹配 

上述代码中最后没有打印结果因为 else 与第二个 if 匹配了。 

通过上面两个代码我们就可以充分感受到代码风格以及代码规范的重要性。

注:分号不要随处放,语句体记得加花括号

2.2 switch 选择语句

switch 语句又叫做多分支语句,通常用在多分支里面。当用 if 使用起来比较复杂的时候我们就可以使用多分支。

比如:输入 1~7 之间的某一个数,然后打印对应的星期,如果用 if 来完成就会涉及到多层 else if 相对就比较复杂,这时我们就可以使用 switch 选择语句

public class Test {
    public static void main(String[] args) {
        int a = 1;
        switch (a) {
            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("超出1~7范围");
        }

    }
}

执行流程

  1. 先计算表达式的值
  2. 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束
  3. 当表达式的值没有与所列项匹配时,执行default 

上述代码执行逻辑,首先计算 switch 后面表达式的值,然后拿这个值依次与 case 后面的常量匹配,一旦匹配上执行该项下的语句,直到遇到break退出,否则一直执行下次。如果一个都没有匹配上则执行 default

注:case后的常量值不可以重复,不要遗忘 break

3.循环结构 

当条件满足,将一直循环下去的语句就叫做循环语句。假设小美买彩票没中奖,只要小美买彩票没中奖,那么她就会每天买,只要她中奖了则就会停止购买,这就叫做循环

3.1 while 循环语句 

public class Test {
    public static void main(String[] args) {
        int a = 1;
        while(a <= 10) {
            System.out.printf("%d ",a);
            a++;
        }
    }
}

执行结果: 

上述代码循环语句首先执行 while 后面的判断表达式,如果结果为 true 则执行循环体,然后再判断 while 后面的判断表达式,如果结果为 true 则继续执行循环体,...,直到 while 后面的判断表达式结果为 false 则退出循环

如果上述代码中没有 a++ 则会造成死循环 

所以循环一共有三部分,分别是:初识值,结束条件,接近结束条件的变化 

3.2 break

break:如果在循环体里面,则直接跳出循环。如果在多分支里面,则跳出多分支

public class Test {
    public static void main(String[] args) {
        int a = 1;
        while(a <= 10) {
            if(a == 7) {
                break;
            }
            System.out.printf("%d ",a);
            a++;
        }
    }
}

运行结果:

执行到 break 就会让循环结束 

上述代码执行逻辑,先执行 while 后面的判断表达式,如果为 true 则循环体,循环体里面判断选择语句是否为 true ,如果为 true 直接跳出循环,否则继续往下执行

3.3 continue 

continue 直接结束本次循环,不会直接跳出循环 

public class Test {
    public static void main(String[] args) {
        int a = 1;
        while(a <= 10) {
            a++;
            if(a == 7) {
                continue;
            }
            System.out.printf("%d ",a);
        }
    }
}

执行结果: 

上述代码执行逻辑,先执行 while 后面的判断表达式,如果为 true 则循环体,循环体里面判断选择语句是否为 true ,如果为 true 跳出本次循环继续执行下一次循环

注意: 

public class Test {
    public static void main(String[] args) {
        int a = 1;
        while(a <= 10) {
            if(a == 7) {
                continue;
            }
            a++;
            System.out.printf("%d ",a);
        }
    }
}

一样的代码,可能顺序不一样最后的结果也就不一样。这个代码就因为 a++选择语句后面就造成了死循环,当 a == 7 时,跳出本次的循环,也就是本次循环 if 语句以下的语句是不会执行的。那么这次循环并没有执行到 a++,那么 a 的值还是 7,进入循环遇到 if 语句执行 continue,又结束了本次循环但 a 还是 7,因此就造成了死循环

注:代码语句顺序还是很重要滴 

3.4 for 循环

语法格式:

表达式①:用于给循环变量设置初始值, 在程序开始时是便会执行,且只会执行一次

表达式②:循环条件的判断,如果判断为 true 则继续执行循环体,否则循环结束

表达式③:循环变量更新方式

for 循环的执行过程:

  1. 首先执行表达式①,然后判断表达式②,如果为真则执行表达式④(否则直接退出循环),然后在执行表达式③
  2. 判断表达式②,如果为真则执行表达式④(否则退出循环)。然后在执行表达式③
  3. 跟 2 的顺序一样,直到表达式②为false,退出循环
public class Test {
    public static void main(String[] args) {
        for (int i = 1; i <= 10;i++) {
            System.out.printf("%d ",i);
        }
    }
}

执行结果: 

  • for 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }
  • for 后面的 { 建议和 for 写在同一行.
  • for 后面不要多写 分号, 否则可能导致循环不能正确执行.
  • 和while循环一样,结束单趟循环用continue,结束整个循环用break 

3.5 do...while 循环 

do...while循环又叫做直到型循环,它是先执行后判断 

语法格式: 

先执行循环语句, 再判断循环条件,循环条件为 true 则继续执行,否则循环结束 

public class Test {
    public static void main(String[] args) {
        int i = 1;
        do {
            System.out.printf("%d ",i);
            i++;
        }while (i <= 10);
    }
}

 执行结果:

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

4.输入输出 

4.1 输出 

public class Test {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(a);//输出加换行
        System.out.print(a);//输出不换行
        System.out.printf("%d",a);//格式化形式输出
    }
}

输出结果:

  • println:输出,加换行
  • print:输出,不换行
  • printf:格式化形式输出 

所以最好两个打印打印到一行了。 

4.2 输入 

使用 Scanner 读取字符串/整数/浮点数 

在使用 Scannery 之前需要导入 util 包 

后面学习了类就自然理解了为什么要导入 util 包了 

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        System.out.println(a);
    }
}

大家现在只需要记住在使用类之前需要new一个对象,也就是在使用Scanner 之前需要 new 一个Scanner ,然后才能通过 scanner 这个对象去使用

相关文章:

  • Qt下生成pdb文件,并在exe崩溃时生成dmp文件,且由dmp查询崩溃原因
  • 蜂鸣器、风扇、震动马达
  • 【VRP问题】基于帝国企鹅优化算法求解冷链配送物流车辆调度优化研究
  • 3) 时频分析与傅立叶变换
  • stm32f4xx-I2C
  • 有了这个 Python 库,以后再也不用写正则表达式了
  • 学习python很无聊?看看这几个有意思的代码,拿去整蛊一下好朋友~ 适当娱乐哈
  • 【老生谈算法】matlab实现滤波器设计源码——滤波器设计
  • 后端研发工程师面经——手撕设计模式
  • 1679. K 和数对的最大数目-自定义哈希表解决
  • 【Objective-C内存管理之引用计数】
  • 找工作经验总结——嵌入式软件工程师必备的能力(表达篇)
  • 【vue基础篇】极简 ESLint + Prettier 配置教程
  • 线性代数-----矩阵复习2
  • 个人算法重刷记录
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 11111111
  • Angularjs之国际化
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • CSS魔法堂:Absolute Positioning就这个样
  • eclipse的离线汉化
  • Iterator 和 for...of 循环
  • java中的hashCode
  • PHP 小技巧
  • Selenium实战教程系列(二)---元素定位
  • Spring核心 Bean的高级装配
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 阿里云前端周刊 - 第 26 期
  • 给第三方使用接口的 URL 签名实现
  • ​低代码平台的核心价值与优势
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (06)Hive——正则表达式
  • (C语言)fgets与fputs函数详解
  • (WSI分类)WSI分类文献小综述 2024
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (二)学习JVM —— 垃圾回收机制
  • (九十四)函数和二维数组
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)iOS字体
  • (转)大型网站的系统架构
  • .FileZilla的使用和主动模式被动模式介绍
  • .Net 基于.Net8开发的一个Asp.Net Core Webapi小型易用框架
  • .NET框架设计—常被忽视的C#设计技巧
  • @Import注解详解
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [20190401]关于semtimedop函数调用.txt
  • [android] 看博客学习hashCode()和equals()
  • [Android]使用Android打包Unity工程
  • [C# WPF] 如何给控件添加边框(Border)?
  • [C/C++随笔] char与unsigned char区别
  • [codevs 1288] 埃及分数 [IDdfs 迭代加深搜索 ]
  • [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated c
  • [ios-必看] IOS调试技巧:当程序崩溃的时候怎么办 iphone IOS