本文源码:GitHub·点这里 || GitEE·点这里

一、分支语句

流程控制语句对任何一门编程语言都是非常重要的,Java中基于流程控制程序执行的不同步骤和代码块。

1、IF条件

IF条件语句会根据不同的判断条件执行不同的语句,if后括号内的条件是否成立关键步骤,IF条件的判断结果必然要是true或false。IF…Else语句则是满足IF条件,就执行相应代码块,否则就执行Elase代码块。

public class Process01 {public static void main(String[] args) {// 演示:Node01if (compare01(40,30)){System.out.println("40>30:true");} else {System.out.println("40>30:false");}// 演示:Node02if (compare01(10,20) && compare01(20,30)){System.out.println("条件成立");} else {System.out.println("条件不成立");}// 演示:Node03if (compare01(20,10) || compare01(20,30)){System.out.println("条件成立");} else {System.out.println("条件不成立");}// 演示:Node04if(compare02(1,1))if(compare02(2,2))System.out.println("Running...");// 演示:Node05if(compare01(1,2))if(compare01(5,3)){System.out.println("5>3");}}private static boolean compare01 (int num1,int num2){System.out.println("判断:num1="+num1+";num2="+num2);return num1 > num2 ;}private static boolean compare02 (int num1,int num2){System.out.println("判断:num1="+num1+";num2="+num2);return num1 == num2 ;}
}

节点案例,测试结果描述:

  • Node01:如果if条件不成立,则执行else流程或者结束;
  • Node02:逻辑且判断,任何条件不成立,则直接结束;
  • Node03:逻辑或判断,任何条件成立,则直接进入分支;
  • Node04:IF的格式,可以去掉{},后续语句会作为分支;
  • Node05:IF语句面试题,不会输出任何内容,第二个语句作为分支;

注意:在流程控制语句中必须使用大括号,即使只有一行代码,避免采用单行的编码方式,这是基础规范。在上面的测试节点4和5,代码看着就感觉扎心。

2、IF-Else-IF条件

Else…IF分支语句用于多种情况进行的判断处理,直到分支判断条件成功,执行分支模块代码,如果没有else条件,可以所有分支都不满足,直接结束。

public class Process02 {public static void main(String[] args) {elseIf(11) ;elseIf(9) ;elseIf(5);}private static void elseIf (Integer num){if (num > 10){System.out.println("num > 10");} else if (num > 7){System.out.println("num > 7");} else if (num > 4){System.out.println("num > 4");} else {System.out.println("num < 4");}}
}

注意:根据条件逐个判断,直到找到第一个满足的条件,不会再继续往下面的判断执行,分支语句执行完毕就会退出当前的else…if流程。超过3层的的逻辑判断代码可以使用卫语句、策略模式、状态模式等来实现。

3、Switch条件

流程描述:switch语句先获取表达式的值,判断表达式的值与case语句后的常量值是否相同,匹配成功则执行该case后的代码块,直到遇到break语句后终止,如果缺失break打断,则继续匹配下一case常量,直到遇到break为止。如果条件全不匹配,则执行default后面的语句。default语句可选,如果不存在default语句,同一个switch语句,case的常量值必须互不相同。

public class Process03 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.print("What day is it today:");String value = scan.next();weekInfo(value);}private static void weekInfo (String value){switch (value) {case "Monday":System.out.println("Monday");break;case "Tuesday":System.out.println("Tuesday");break;case "Wednesday":System.out.println("Wednesday");break;case "Thursday":System.out.println("Thursday");break;case "Friday":System.out.println("Friday");break;case "Saturday":System.out.println("Saturday");break;case "Sunday":System.out.println("Sunday");break;default:System.out.println("Matching failure");break;}}
}

注意:从JDK1.7之后,switch支持对String字符串的匹配。

二、循环语句

循环语句就是在满足特定条件的情况下,反复执行同个操作。循环语句包括:for循环、while循环、do···while循环。

1、For循环

Java开发中最有用的循环方式,也是诸多算法中的基础控制语句,在常见的很多算法编码实现中,都需要借助for循环方式。

public class Process04 {public static void main(String[] args) {// Node01int sum = 0;for(int i=1; i<=100; i++) {sum += i;}System.out.println(sum);// Node02String[] nameArr = {"Java","C++","C#"} ;for (String name:nameArr){System.out.println("name="+name);}// Node03// 输出 i = 13int i = 0;for (i++; i++ < 10; i++);System.out.println(++i);// 输出:j=3 6 9int j = 0;for (j++; j++ < 10; j++){System.out.println(++j);}}
}

节点案例,测试结果描述:

  • Node01:for循环作为计算中的常用方式;
  • Node02:foreach遍历模式,简化循环操作,也可以改写为for语句;
  • Node03:循环for语句的基础执行机制,两道面试常见题;

注意:越是基础的东西,学起来越难,for语句作为很多算法实现的基础控制,理解起来相当的绕。

2、While循环

while循环语句首先判断条件是否成立,成立才执行循环体;

do···while循环语句先执行一次循环体,然后判断条件是否成立,所以do···while至少会执行一次;

public class Process05 {public static void main(String[] args) {int num1 = 1;int num2 = 1;// while循环while(num1 <= 3) {System.out.println("num1 == " + num1);num1++;}// do...while循环do {System.out.println("num2 == " + num2);num2++;} while(num2 <= 3);}
}

注意:while循环在实际的开发中,因为极其容易导致死循环,所以使用并不多。

三、流程中断

Java中有三种流程中断语句,关键字分别为break、continue、return语句。

1、Return语句

Java中最常用的流程控制关键字,当执行return语句后,从该方法返回,返回到调用该方法的业务流程中。

public class Process06 {public static void main(String[] args) {System.out.println(getNum1());System.out.println(getNum2());}public static int getNum1 (){int a =100;try{return a+1;   // 这里是运算逻辑,非赋值}catch(Exception e){e.printStackTrace();}finally{return a;}}public static int getNum2 (){int a =100;try{return a++;   //  a++ -> a=a+1 此时a的值改变}catch(Exception e){e.printStackTrace();}finally{return a;}}
}

return 常在位置

  • return语句只在方法最后出现一次。
  • return语句仅在try和catch里面都出现。
  • return语句仅在try和方法最后都出现。
  • return语句仅在catch和方法的最后都出现。

2、Break语句

break中断语句常用在for、while、do···while循环中,用于退出当前整个循环流程,非当前这一次循环。

public class Process07 {public static void main(String[] args) {for (int i = 1 ; i < 3 ; i++){if (i == 2){break ;}System.out.println("i = " + i);}}
}

3、Continue语句

Continue中断语句常用在for、while、do···while循环中,用于退出当前这一次循环,进入下一次循环。

public class Process08 {public static void main(String[] args) {for (int i = 1 ; i < 3 ; i++){if (i == 1){continue ;}System.out.println("i = " + i);}}
}

四、应用场景

1、冒泡排序算法

public class Process09 {public static void main(String[] args) {int[] score = {9,8,7,6,5} ;// 排序次数:最多 length - 1 次for (int i = 0 ; i < score.length -1 ; i ++){// 当前排序的集合区间,排序完一个数据就放弃一个for (int j = 0 ; j < score.length - i - 1 ; j++){// 冒泡排序:把结果大的向后扔if (score[j] > score[j+1]){int temp = score[j] ;score[j] = score[j+1] ;score[j+1] = temp ;}}}// 输出排序后的结果集for (int i = 0 ; i < score.length ; i++){System.out.print(score[i]);}}
}

2、排列组合算法

有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

public class Process10 {public static void main(String[] args) {arrange() ;}public static void arrange (){int i=0; // 百位数int j=0; // 十位数int k=0; // 个位数int t=0; // 计数器for (i = 1 ; i <= 4 ; i++){for (j = 1 ; j <= 4 ; j++){for (k = 1 ; k <=4 ; k++){if (i != j && j != k && k != i){t += 1 ;System.out.print(i*100+j*10+k+"--");}}}}System.out.println();System.out.println("t="+t);}
}

3、递归常见算法

基于递归思想的各种计算方法实现。

public class Process11 {public static void main(String[] args) {System.out.println(getSumOne(100));System.out.println(getSumTwo(30));System.out.println(getSumThree(5));}/*** 使用递归的方式计算1+2+...+100*/public static int getSumOne (int i){ // 传入100int sum ;if (i == 1){return 1 ;}else {sum = i + getSumOne(i - 1) ;}return sum ;}/*** 一列数的规则如下: 1、1、2、3、5、8、13、21、34...* 求第30位数是多少, 用递归算法实现*/public static int getSumTwo (int i){ // 传入第几位数下标if (i <= 0){return 0 ;} else if (i == 1 || i == 2){ // 处理前面2位的1,1return 1 ;} else { // 当前位数是前两位之和return getSumTwo(i - 1) + getSumTwo(i - 2) ;}}/*** 1*2*3*...*100 递归计算阶乘*/public static int getSumThree (int i){if (i == 1){return i ;} else {return i * getSumThree (i - 1) ;}}
}

五、源代码地址

GitHub·地址
https://github.com/cicadasmile/java-base-parent
GitEE·地址
https://gitee.com/cicadasmile/java-base-parent

推荐阅读:Java基础系列

序号 文章标题
01 Java基础:基本数据类型,核心点整理
02 Java基础:特殊的String类,和相关扩展API
01 Java并发:线程的创建方式,状态周期管理
02 Java并发:线程核心机制,基础概念扩展
03 Java并发:多线程并发访问,同步控制
04 Java并发:线程间通信,等待/通知机制
05 Java并发:悲观锁和乐观锁机制
06 Java并发:Lock机制下API用法详解

Java基础篇(03):流程控制语句,和算法应用相关推荐

  1. Java基础篇3——流程控制

    Java基础篇3--流程控制 1.顺序结构 正常代码的流程即是顺序流程 2.分支结构 2.1.if-else分支 if(条件表达式) {语句块1; } if(条件表达式) {语句块1; } else ...

  2. java基础起步三-流程控制语句中的条件语句

    文章目录 流程控制语句结构: 1. 顺序结构 2. 分支结构 3. 循环结构 分支结构语法: 1. 单分支结构; 2. 双分支结构 3. 多分支条件语句: 选择结构 语法: 注意: 输入输出案例 练习 ...

  3. Java基础篇:if控制语句

    Java中if控制语句与其他语言中的IF语句非常相似.并且,它与C/ C++语言中的if语句的语法完全相同.它的最简单形式如下: if(condition) statement; 这里,条件condi ...

  4. Java基础三:流程控制语句

    1.Java条件语句之 if 生活中,我们经常需要先做判断,然后才决定是否要做某件事情.例如,如果考试成绩大于 90 分,则奖励一个 IPHONE 5S .对于这种"需要先判断条件,条件满足 ...

  5. 菜鸟学习笔记:Java基础篇2(变量、运算符、流程控制语句、方法)

    菜鸟学习笔记:Java基础篇2 变量 基本概念 变量作用域 final关键字 运算符 算术运算符 比较运算符 逻辑运算符 位运算符 赋值运算符 条件运算符 运算符优先级 Java三种流程控制语句 顺序 ...

  6. java跳转控制语句有哪些_Java语言基础学习之流程控制语句和跳转控制语句实例分析...

    本文主要向大家介绍了Java语言基础学习之流程控制语句和跳转控制语句实例分析,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 一.流程控制语句 在一个程序执行的过程中,各条语句的执行顺 ...

  7. 菜鸟学习笔记:Java基础篇3(面向对象思想、程序执行过程内存分析、面向对象重要概念)

    菜鸟学习笔记:Java面向对象篇上 Java面向对象的思想 Java程序执行过程内存分析 Java垃圾回收机制 构造方法 方法重载(overload) static关键字 this关键字 Java面向 ...

  8. 《Java 后端面试经》Java 基础篇

    <Java 后端面试经>专栏文章索引: <Java 后端面试经>Java 基础篇 <Java 后端面试经>Java EE 篇 <Java 后端面试经>数 ...

  9. 菜鸟学习笔记:Java基础篇7(包装类、时间相关类、文件类、异常处理类)

    菜鸟学习笔记:Java其他常用类 基本数据类型包装类 时间处理和文件处理相关类 Date时间类 SimpleDateFormat Calendar日历类 文件类 异常机制 异常的概念 Java异常处理 ...

最新文章

  1. python源文件保存在哪里_python数据爬下来保存在哪里
  2. python菜鸟教程m-Python map() 函数
  3. 由键盘下陷引起的奇怪事件
  4. Linux学习笔记之一
  5. jooq权限配置_将jOOQ与Spring结合使用:配置
  6. C#LeetCode刷题之#747-至少是其他数字两倍的最大数( Largest Number At Least Twice of Others)
  7. extract($_POST[])
  8. Authentication failed for 错误
  9. 现阶段选择ArcMap还是ArcGIS Pro
  10. 基于CWMP(TR069)协议ACS服务器的搭建
  11. 直插电阻的分类和区别
  12. iPhone 12手势使用技巧
  13. python几种矩阵重组降维方式对比
  14. 图片如何转为GIF?gif格式的图片怎么做?
  15. Struts原理与实践
  16. 怎样用计算机命令修复软件,chkdsk磁盘修复命令工具怎么用,怎样运行chkdsk工具修复?...
  17. 常用正则表达式-IP地址
  18. Python语言程序设计 (第11期) 期末测验: 课程水平综合测验
  19. 220V交流电转换为低压直流的简单方法 电阻降压
  20. 营销世界的 5 大剧变之 ② 微服务和 API

热门文章

  1. 计组之存储系统:1、存储系统的概念与基本组成(层次、分类、性能指标、基本结构、寻址)
  2. 计算机网络之数据链路层:6、后退N帧协议(GBN)
  3. (王道408考研操作系统)第一章计算机系统概述-第一节1:操作系统基本概念以及目标和功能
  4. linux pthread
  5. Qt QString 与char* 相互转换
  6. C#删除字符串倒数第几个字符后的所有字符串
  7. C/C++下载文件_上传文件
  8. mysql8 修改root密码
  9. ant-pro使用Form表单验证上传图片出现的问题
  10. 免安装Oracle客户端使用PL/SQL