Java流程控制 (分支与循环)

流程控制

目录:

顺序结构

分支

循环

循环嵌套

控制循环的关键词

总会出现一种场景:要满足某个条件时,才去做一件事情。                         —分支

也有另外一种场景:重复做一个事情,直到满足某个条件才会停下来。       —循环

编程就是把一些人类不愿意干、干起来很乏味的事情,告诉计算机去做

流程控制一共有 3 种结构:

    A.  顺序结构。如果没有流程控制,计算机总是从上到下,依次执行每一行。

    B.  分支。满足某个条件时,才去执行代码。

    C.  循环。重复一段代码。

分支:if  、 switch

        if 语句

3 种语法:

        第一种语法格式:

        if(  返回 boolean 的表达式)

        {

               // 要做的事情

        }

        第二种语法格式:

        if(  返回 boolean 的表达式)

        {

        // 要做的事情

        }

        else

        {

        // 要做的事情

        }
        第三种语法格式:

        if (  返回 boolean 的表达式)

        {

        // 要做的事情

        }

        else if (  返回 boolean 的表达式)      // else if 可出现 0~N 次

        {

        }

        else                                                 // else  可出现 0~1 次

        {

        // 要做的事情

        }

2 个注意点:

        A.    如果条件执行体只有一行代码,Java 允许省略条件执行体的花括号。

               规则:如果省略了花括号,if 条件只控制到第一个分号(;)前面

               建议:即使条件执行体只有一行代码,也包括花括号。

        B.    else 本身就是条件

               当我们有多个 else if 块时,

               建议:先处理范围小的条件。

         switch语句

当等于某个值时,才执行一段代码

        只有在 JDK 7 里,表达式的值才能 String

        switch( 返回值是 byte 、short、char、int 或 String 或 枚举的表达式)

        {

              case 值 1:                         // case 块可以出现 1~N 次

                       // 要做的事情

                      break;

              case 值 2:                     

                       // 要做的事情

                       break;

              case 值 3:

                       // 要做的事情

                       break;

              default:    // 当表达式的值与前面所有 case 块的值都不相等时,才会执行。

                       // 要做的事情

         }

注意点:  省略 break 后的注意点                           //  笔试题 会考!!!!!!!!!!!!!

        省略 break 后的执行流程,拿 switch 表达式的值,依次与每个 case 块的值进行比较。

        当遇到一个相等的值后,将直接执行所有的执行性代码,

                  在遇到 break 语句之前,不会与 case 块的值进行比较,而是直接执行代码。

        省略 break 几乎没有太大的价值。

        建议:每次写了 case 之后,在写其他代码之前,立即写 break

SwitchTest 程序 及 运行结果:

public class SwitchTest

{

    public static void main(String[] args)

    {

        char score = 'B';

        switch (score)

        {

            case 'A':

            System.out.println("优秀");

            break;

            case 'B':

            System.out.println("良好");

            break;

            case 'C':

            System.out.println("中");

            break;

            case 'D':

            System.out.println("及格");

            break;

            default:

            System.out.println("不及格");

            break;

        }

    }

}

SwitchTest

SwitchTest 程序 及 运行结果:

public class Switch省略break

{

    public static void main(String[] args)

    {

        char score = 'B';

        switch (score)

        {

            case 'A':

            System.out.println("优秀");

            case 'B':

            System.out.println("良好");

            case 'C':

            System.out.println("中");

            case 'D':

            System.out.println("及格");

            default:

            System.out.println("不及格");

        }

    }

}


Switch省略break

以下是一个小例子:

活动安排,内有自动获取系统时间并提取周几,然后根据设置的周几输出要做的事情,可以修改系统时间来输出不同的活动安排。

ActionSchedule  程序 及 运行结果:

import java.util.*;

import java.text.*;

public class ActionSchedule

{

    public static void main(String[] args)

    {

        // 获取系统当前时间

        Date date = new Date();

        // System.out.println(date); // 显示英文的日期

        // 创建一个 DateFormat 的实例,DateFormat 的作用是把日期转换成人看的懂的格式的字符串

        DateFormat df = DateFormat.getDateInstance(DateFormat.FULL);

        // System.out.println(df.format(date));  // 显示出来年月日  周几  2017年8月2日 星期三

        String str = df.format(date);  // 输出 2017年8月2日 星期三

        int spacePos = str.indexOf(" "); // 获取" "在前面字符串中的位置

        // spacePos代表空格的位置,spacePos+1 代表空格后面的字符

        // 截取从空格后面的字符开始,直到结束的字符串

        String day = str.substring(spacePos + 1);

        switch (day)

        {

            case "星期一":

            System.out.println("去跑步");

                break;

            case "星期二":

            System.out.println("王者荣耀找人开黑");

                break;

            case "星期三":

            System.out.println("去找宝贝玩耍");

                break;

            case "星期四":

            System.out.println("去lol");

                break;

            case "星期五":

            System.out.println("去购物");

                break;

            case "星期六":

            System.out.println("去健身");

                break;

            case "星期日":

            System.out.println("睡觉");

                break;

        }

    }

}


ActionSchedule

循环:while 、do while、for、for each

循环(loop):回圈

把一段重复的代码执行多次,直到满足某个条件为止。

为了在合适的时候,停止重复执行,需要让程序出现满足停止循环的条件。

while循环:

while( 返回 boolean 值的表达式)  // 只要 while 中表达式为 true,循环将会一直执行。

{

      //  需要重复做的事情

}

如果循环体只有一条代码,可以省略花括号。

规则:如果省略了花括号,while 条件只控制到第一个分号(;)前面

建议:即使循环体只有一行代码,也包括花括号。

WhileTest 程序 及 运行结果:

public class WhileTest

    {

    public static void main(String[] args)

    {

        int i = 0;

        while(i < 10)

        {

            System.out.println("i的值为: " + i++);

        }

    }

}

WhileTest

WhileError省略花括号 程序 及 运行结果:

public class WhileError

{

    public static void main(String[] args)

    {

        int i = 0;

        while(i < 10)

        i ++;  //  先知循环本条语句,直到 i 为10 时 false,跳出循环,输出为 10

        System.out.println("i的值为: " + i++);

    }

}


WhileError

WhileError2 (while 后面有分号 陷阱) 程序 及 运行结果:

public class WhileError2

{

    public static void main(String[] args)

    {

        int i = 0;

        while(i++ < 10); // 同注意分号,但是此时i可以加到 10,然后false跳出循环(此时i为11)到 i++,最后输出12

        // while(i < 10);  // 注意本句后面的分号,分号意思本句就结束,所以这是一个死循环

        {

            i ++;

            System.out.println("i的值为: " + i);

        }

    }

}

do while 循环:

do

{

}while ( 返回 boolean 值的表达式)

    这个与 while 相比,把循环放在前面。

    先执行一次循环体,如果条件为 true ,执行下一次循环

    对于 do while 来说,无论如何,循环至少会执行一次。

for 循环:

for( 初始化语句 ; 返回 boolean 值的表达式 ; 每次循环体执行完后执行的代码 )

{

}

  “初始化语句”可以省略。

        如果有“初始化语句”,只有循环开始之前,会执行一次“初始化语句”

        初始化语句可以一次定义多个变量!

  “返回 boolean 值的表达式”可以省略。

        如果省略,意味着它的值永远是 true

  “每次循环体执行完后执行的代码”可以省略。

        如果有“每次循环体执行完后执行的代码” ,将在每次循环体执行完成之后,开始下一次循环体之前,执行该代码。

只要两个分号之间的表达式返回 true ,程序将执行循环体。

ForTest  程序 及 运行结果:

for(int i = 0;i < 10;i++)

{

    System.out.println("i的值为" + i);

}

ForTest

ForTest2  程序 及 运行结果:

for(int i = 0;i < 10;i++)

{                                  // i = (int)(i*0.2)

    System.out.println("i的值为" + (i *= 0.2));

    // *=  强转小数为整型,所以不可能出现小数,所以结果一直为0

}

ForTest2

循环嵌套:

在循环里面,再放置循环——就是嵌套循环

把内层循环当成外层循环的一条语句即可。

循环嵌套  程序 及 运行结果:

int i = 0;

while(++i < 10)

{

    System.out.println("进入外层循环");

    for(int j = 0;j < 10;j++)

{

    System.out.println("i的值是" + i + ",j的值是" + j);

}

    System.out.println("外层循环的最后一行");

}

循环嵌套

控制循环的关键词:break、continue、return

break  完全结束一个循环本身。

continue    停止当前循环体的执行(相当于【忽略 continue 后的语句】),开始下一次循环体

                  如果 continue 位于循环体的最后一部分,它就是多余的

return    结束整个方法。  遇到 return ,方法就会结束执行。

break 、continue 后可以紧跟标号。

              带标号的 break 用于结束标号所标识的循环。

              带标号的 continue 用于忽略标号所标识的循环后面剩下的语句。


ContinueTest  程序 及 运行结果:

public class ContinueTest

{

    public static void main(String[] args)

    {

        for(int i = 0;i < 10;i ++)

        {

            System.out.println("i的值是" + i);

            if(i > 3)  // 当 i > 3 时,continue 执行,忽略后面的print语句,直接跳到 for

            {

                continue;

            }

            System.out.println("----------------");

        }

    }

}

ContinueTest

ReturnTest  程序 及 运行结果:

public class ReturnTest

{

    public static void main(String[] args)

    {

        int i = 0;

        while(++i < 10)

        {

            System.out.println("进入外层循环");

            for(int j = 0;j < 10;j++)

            {

                for(int k = 0;k < 20;k++)

                {

                    System.out.println("i的值是" + i

                                              + ",j的值是" + j

                                              + ",k的值是" + k);

                    if(k > 3)    //当 k > 3 时,执行 return ,结束整个方法 

                    {

                        return;

                    }

                    }

                }

               System.out.println("外层循环的最后一行");

            }

    }

}

ReturnTest

LabelTest  程序(带标号的 break) 及 运行结果:

outer:

for(int i = 0;i < 10;i ++)

{

    for(int j = 0;j < 10;j ++)

    {

        System.out.println("i的值为" + i + ",j的值为" + j);

        if(j > 3)

        {

            break outer;//带标号的循环用于结束标号所在循环的循环

        }

    }

}  // 当 j = 4 时,执行  break outer,此时结束 标号 outer 所在的循环,即结束输出


LabelTest

ContinueLabel  程序(带标号的 continue) 及 运行结果:

outer:

for(int i = 0;i < 10;i ++)

{

    for(int j = 0;j < 10;j ++)

    {

        System.out.println("i的值为" + i + ",j的值为" + j);

        if(j > 3)

        { 

            continue outer;//带标号的 continue 用于忽略标号所在循环的循环的剩下语句

        }        //  当 j = 4时,执行 continue outer,忽略标号所在循环的循环剩下语句,即忽略后三个},直接又到了 for(int i = 0;i < 10;i ++)  循环,最终结果输出 50 次

    }

}    

ContinueLabel

ContinueLabel2 程序(带标号的 continue) 及 运行结果:

outer:

for(int i = 0;i < 10;i ++)

{

    for(int j = 0;j < 10;j ++)

    {

        System.out.println("i的值为" + i + ",j的值为" + j);

        if(i > 3)   //  注意,这里与上个程序的区别,j 换成 i !!!!!!!

        {

            continue outer;//带标号的 continue 用于忽略标号所在循环的循环的剩下语句

        }    //  i = 4 时,输出 40 后判断 i>3,则忽略标号所在循环的循环的剩下语句,直接跳到 for(int i = 0;i < 10;i ++) 循环,i 加一 为 5 > 3, 以此类推,后面值输出   40,50,60,70,80,90  共输出 46 个值

    }

}


ContinueLabel2

练习:

在控制台用 * 打印大小可控制的圆。

点我跳转打印圆    



以上,未完


写在最后:

总结一下互联网行业的一些缩写,昨天 FE 小哥哥问我,你知道 FE 是啥吗,气氛一度迷之尴尬……

PM:(project manager)现一般指的都是产品经理

RD:(Research and Development)研发

如:软件RD工程师就是软件研发工程师,诸如php程序猿,Java程序猿,无论是爱疯的还是安卓的都是属于这一类别。偏向于后端的技术实现。

FE:(Front-End)前端,前端开发(Front-End Development)

FE是web前端研发、前端开发的意思!前端工程师基于需求根据视觉设计稿、交互设计稿,实现前端界面显示及交互行为的过程。

UE:(User Experience,简称UX或 UE)用户体验

UI:  (User Interface)用户界面。UI设计则是指对软件的人机交互、操作逻辑、界面美观的整体设计。

QA: (QUALITY ASSURANCE,中文意思是“质量保证”)测试

OP:(Operations)运维

DBA:(Database Administrator,简称DBA)数据库管理员

DB:既数据库(Database)。


今天周三,想想都一周了啊,时间过的真的快啊,马上要周六了哈哈,就又能见到腻了那~

打道回府,感冒好烦~




   

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容

  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    叶总韩阅读 5,124评论 0 41
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,838评论 0 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,558评论 18 399
  • 一、 1、请用Java写一个冒泡排序方法 【参考答案】 public static void Bubble(int...
    独云阅读 1,344评论 0 6
  • 楔子 看着手中粉红色还带着斑点的‘眼罩’,我有些狐疑的问道,“你确定这是你们公司研发了十年的‘一日圆梦’?这种东西...
    公子伊洛阅读 394评论 1 1