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

一、分支语句

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

1、IF条件

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

public class Process01 {
public static void main(String[] args) {
// 演示:Node01
if (compare01(40,30)){
System.out.println("40>30:true");
} else {
System.out.println("40>30:false");
}
// 演示:Node02
if (compare01(10,20) && compare01(20,30)){
System.out.println("条件成立");
} else {
System.out.println("条件不成立");
}
// 演示:Node03
if (compare01(20,10) || compare01(20,30)){
System.out.println("条件成立");
} else {
System.out.println("条件不成立");
}
// 演示:Node04
if(compare02(1,1))
if(compare02(2,2))
System.out.println("Running...");
// 演示:Node05
if(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) {
// Node01
int sum = 0;
for(int i=1; i<=100; i++) {
sum += i;
}
System.out.println(sum); // Node02
String[] nameArr = {"Java","C++","C#"} ;
for (String name:nameArr){
System.out.println("name="+name);
} // Node03
// 输出 i = 13
int i = 0;
for (i++; i++ < 10; i++);
System.out.println(++i); // 输出:j=3 6 9
int 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){ // 传入100
int 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,1
return 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. (基础篇)PHP流程控制语句

    不论是PHP还是别的语法,程序总是由若干条语句组成. 从执行方式上看,语句的控制结构分为以下三种: 1.  顺序结构:从第一条语句到最后一条语句完全顺序执行: 2.  选择结构:根据用户输入或语句的中 ...

  2. Java基础学习之流程控制语句(5)

    目录 1.顺序结构 2.选择结构 2.1.if else结构 2.2.switch case结构 3.循环结构 3.1.while结构 3.2.do while结构 3.3.for结构 3.3.1.普 ...

  3. Java基础篇 - 强引用、弱引用、软引用和虚引用

    Java基础篇 - 强引用.弱引用.软引用和虚引用 原创零壹技术栈 最后发布于2018-09-09 08:58:21 阅读数 4936 收藏展开前言Java执行GC判断对象是否存活有两种方式其中一种是 ...

  4. Java基础语法(4)-流程控制

    title: Java基础语法(4)-流程控制 blog: CSDN data: Java学习路线及视频 1.程序流程控制 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定 ...

  5. 033 01 Android 零基础入门 01 Java基础语法 03 Java运算符 13 运算符和表达式知识点总结

    033 01 Android 零基础入门 01 Java基础语法 03 Java运算符 13 运算符和表达式知识点总结 本文知识点:运算符和表达式知识点总结 前面学习的几篇文都是运算符和表达式相关的知 ...

  6. iOS系列 基础篇 03 探究应用生命周期

    iOS系列 基础篇 03 探究应用生命周期 目录: 1. 非运行状态 - 应用启动场景 2. 点击Home键 - 应用退出场景 3. 挂起重新运行场景 4. 内存清除 - 应用终止场景 5. 结尾 本 ...

  7. java基础篇---I/O技术

    java基础篇---I/O技术   对于任何程序设计语言而言,输入输出(I/O)系统都是比较复杂的而且还是比较核心的.在java.io.包中提供了相关的API. java中流的概念划分 流的方向: 输 ...

  8. 金三银四跳槽季,BAT美团滴滴java面试大纲(带答案版)之一:Java基础篇

    Java基础篇: 题记:本系列文章,会尽量模拟面试现场对话情景, 用口语而非书面语 ,采用问答形式来展现.另外每一个问题都附上“延伸”,这部分内容是帮助小伙伴们更深的理解一些底层细节的补充,在面试中可 ...

  9. java基础篇---HTTP协议

    java基础篇---HTTP协议   HTTP协议一直是自己的薄弱点,也没抽太多时间去看这方面的内容,今天兴致来了就在网上搜了下关于http协议,发现有园友写了一篇非常好的博文,博文地址:(http: ...

随机推荐

  1. Vue.js 组件复用和扩展之道

    软件编程有一个重要的原则是 D.R.Y(Don't Repeat Yourself),讲的是尽量复用代码和逻辑,减少重复.组件扩展可以避免重复代码,更易于快速开发和维护.那么,扩展 Vue 组件的最佳 ...

  2. Apache POI 操作Excel(3)-- Excel基础

    Excel基本组成 首先在生成Excel前,我们需要了解Excel文件的组织形式.一个Excel文件称为一个workbook,一个workerbook至少包含一个表单(sheet),一个表单有多个行( ...

  3. 聊聊Java中的异常及处理

    前言 在编程中异常报错是不可避免的.特别是在学习某个语言初期,看到异常报错就抓耳挠腮,常常开玩笑说编程1分钟,改bug1小时.今天就让我们来看看什么是异常和怎么合理的处理异常吧! 异常与error介绍 ...

  4. PHPstorm快捷键的学习

    1.Ctrl + 空格 当输入代码时,PHPstorm 会自动出现联想选项. 但是,如果在输入时联想时错过了选择,我们要想让他再一次出现联想,通常采用的方法是在先前的输入后面再输入字符,这时联想又会出 ...

  5. HotSpot二分模型(1)

    HotSpot采用了OOP-Klass模型来描述Java类和对象.OOP(Ordinary Object Pointer)指的是普通对象指针,而Klass用来描述对象的具体类型. 那么为何要设计这样一 ...

  6. 6.28日模拟考试总结(T1:翻转游戏;T2:抢掠计划,T3:测绘,T4:奖学金)

    今天的考试有结束了,又一次被右边的同桌虐了(额,排名第三的大佬)但是考试还是进步了一名,算是有进步吧 成绩: 那个12名就是我,一个AC都没有,太难受了. T1: 题目链接:http://hzoi.c ...

  7. HDU-1051/POJ-1065 Wooden sticks 木棍子(动态规划 LIS 线型动归)

    嘤嘤嘤,实习半年多的小蒟蒻的第一篇博客(题解) 英文的: There is a pile of n wooden sticks. The length and weight of each stick ...

  8. P2585 三色二叉树 题解

    题目 一棵二叉树可以按照如下规则表示成一个由0.1.2组成的字符序列,我们称之为"二叉树序列S": \[S=\left\{ \begin{aligned} 0 &\ \ 表 ...

  9. 我们现在的git版本管理

    1.git发布正式版都统一用master分支的代码发布2.每次开发下一版本的需求时,将master分支的代码打一个tag,版本号与后台一致3.需要紧急修复线上的bug时,从master分支拉一个分支出 ...

  10. element-ui的upload组件的clearFiles方法的调用

    element-ui使用中碰到的问题 <template> <div> <el-button @click="clearFiles">重新上传& ...