Java 基本语法---流程控制


0. 概述

三大流程控制语句:顺序、选择、循环。

选择结构:

  • if 结构,if - else结构;
  • 多重 if - else 语句 ;
  • 嵌套 if - else 语句 ;
  • switch 结构 ;

循环结构:

  • while 循环, do - while 循环, for循环 ;
  • Java增强for循环
  • 循环嵌套

1. 选择结构

1.1 if 结构

一个if语句包含一个布尔表达式和一条或多条执行语句;

布尔表达式值为true,执行if 语句;

格式:

if(布尔表达式)
{
    //布尔表达式值为true,执行语句;
}

1.2 if - else 结构

布尔表达式值为true,执行 if 语句;

布尔表达式值为false,执行 else 语句;

格式:

if(布尔表达式)
{
    //布尔表达式值为true,执行语句;
}
else
{
    //布尔表达式值为false,执行语句;
}

1.3 多重 if - else 结构

格式:

if(布尔表达式1)
{
    //布尔表达式1值为true,执行语句;
}
else if(布尔表达式2)
{
    //布尔表达式2值为true,执行语句;
}
else if(布尔表达式3)
{
    //布尔表达式值3为true,执行语句;
}
else
{
    //如果以上所有表达式的值都为false,则执行语句;
}

1.4 if 嵌套结构

格式:

if(布尔表达式1)
{
    //布尔表达式1值为true,执行语句
    if(布尔表达式2)
    {
        //布尔表达式2值为true,执行语句
    }
}

1.5 switch结构

格式:

switch(常量值/expression)
{
    case value1:
    //执行语句
    break;  //可选

    case value2:
    //执行语句
    break;  //可选

    ......
    default :
    //执行语句
}

switch语句有如下规则:

  • switch语句中的变量类型只能为byte、short、int或者char。
  • switch语句可以拥有多个case语句。每个case后面跟一个要比较的值和冒号。
  • case语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
  • 当变量的值与case语句的值相等时,那么case语句之后的语句开始执行,直到break语句出现才会跳出switch语句。
  • 当遇到break语句时,switch语句终止。程序跳转到switch语句后面的语句执行。case语句不必须要包含break语句。如果没有break语句出现,程序会继续执行下一条case语句,直到出现break语句。
  • switch语句可以包含一个default分支,该分支必须是switch语句的最后一个分支。default在没有case语句的值和变量值相等的时候执行。default分支不需要break语句。

1.6 if 和 switch 区别

if 结构

  • 判断条件为布尔类型(布尔表达式)
  • 判断条件是一个范围

switch 结构

  • 判断条件为常量值

1.7 案例1--输出九九乘法表

public class MultiplicationTable {
    public static void main(String[] args) {
        for (int i = 1;  i <= 9; ++i)
        {
            for (int j = 1; j <= 9; j++)
            {
                if(j < i)
                {
                    //输出的空格由"%d * %d = %2d "决定
                    System.out.print("            ");
                }
                else
                {
                    System.out.printf("%d * %d = %2d ", i ,j , i*j);
                }
            }
            System.out.println();
        }
    }
}

Output:
1 * 1 =  1 1 * 2 =  2 1 * 3 =  3 1 * 4 =  4 1 * 5 =  5 1 * 6 =  6 1 * 7 =  7 1 * 8 =  8 1 * 9 =  9
           2 * 2 =  4 2 * 3 =  6 2 * 4 =  8 2 * 5 = 10 2 * 6 = 12 2 * 7 = 14 2 * 8 = 16 2 * 9 = 18
                      3 * 3 =  9 3 * 4 = 12 3 * 5 = 15 3 * 6 = 18 3 * 7 = 21 3 * 8 = 24 3 * 9 = 27
                                 4 * 4 = 16 4 * 5 = 20 4 * 6 = 24 4 * 7 = 28 4 * 8 = 32 4 * 9 = 36
                                            5 * 5 = 25 5 * 6 = 30 5 * 7 = 35 5 * 8 = 40 5 * 9 = 45
                                                       6 * 6 = 36 6 * 7 = 42 6 * 8 = 48 6 * 9 = 54
                                                                  7 * 7 = 49 7 * 8 = 56 7 * 9 = 63
                                                                             8 * 8 = 64 8 * 9 = 72
                                                                                        9 * 9 = 81

1.8 案例2--输出某一年的某一天有多少天

public class Days {
    public static void main(String[] args) {
        int days = 0;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要确定的年份:");
        int year = sc.nextInt();
        System.out.println("请输入要确定的月份:");
        int month = sc.nextInt();

        switch (month)
        {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                days = 31;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                days = 30;
                break;
            case 2:
                if((year %400 == 0) || (year % 100 != 0 && year %4 == 0))
                {
                    days = 29;
                    break;
                }
                else
                {
                    days = 28;
                    break;
                }
            default:
                System.out.println("您输入的月份有误!");
                System.exit(0);
        }
        System.out.printf("%4d 年 %2d 月 共有 %2d 天\n",year,month,days);
    }
}

Output:
请输入要确定的年份:
2018
请输入要确定的月份:
02
2018 年  2 月 共有 28 天

请输入要确定的年份:
2008
请输入要确定的月份:
02
2008 年  2 月 共有 29 天

2.循环结构

2.1 while循环

只要布尔表达式值为true,就会执行循环内容。直到布尔表达式值为false,退出循环;

while(布尔表达式)
{
    //布尔表达式值为true,执行循环内容
}

2.2 do ... while 循环

只要布尔表达式值为true,就会执行循环内容。直到布尔表达式值为false,退出循环;和while类似,不同的是do...while语句至少会被执行一次;

do
{
    //布尔表达式值为true,执行循环内容
}while(布尔表达式)

2.3 for循环

for循环执行次数在执行前确定。

for(初始化;布尔表达式;更新)
{
    //执行代码
}

关于for的几点说明:

  • 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
  • 然后,检测布尔表达式的值。如果为true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。
  • 执行一次循环后,更新循环控制变量。
  • 再次检测布尔表达式。循环执行上面的过程。

2.4 Java增强for循环

声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。

表达式:表达式是要访问的数组名,或者是返回值为数组的方法。

for(声明语句:表达式)
{
    //执行代码
}

2.5 案例1--循环输出26个英文小写字母,要求分两行输出

public class OutputLetters {
    public static void main(String[] args) {
        //循环输出26个英文小写字母,要求分两行输出
        char ch = 'a';
        int count = 0;//控制换行
        while(ch <= 'z')
        {
            System.out.printf(ch + " ");
            ch ++;
            count ++;

            if (count % 13 == 0)
            {
                System.out.println();
            }
        }

        System.out.println();
        ch = 'a';
        count = 0;
        for(count = 1, ch = 'a';ch <= 'z';ch ++,count ++)
        {
            System.out.printf(ch + " ");
            if (count % 13 == 0)
            {
                System.out.println();
            }
        }

    }
}

Output:
a b c d e f g h i j k l m
n o p q r s t u v w x y z 

a b c d e f g h i j k l m
n o p q r s t u v w x y z 

2.6 break

break语句

  • break语句可以结束当前循环的执行;
  • 执行完break语句,循环体中位于break语句后面的语句就不会被执行;
  • 在多重循环嵌套中,break语句相当于向外跳一层;

2.7 continue

continue语句:

  • continue语句只能用在循环里;
  • continue语句可以结束当前循环的执行,但是要继续下一次循环的执行;
public class OutputLettersDemo {
    public static void main(String[] args) {
        //循环输出26个英文小写字母,要求分两行输出
        //练习break,cotinue
        char ch = 'a';
        int count = 0;//控制换行
        while(ch <= 'z')
        {
            if(ch == 'x')
                break;
            System.out.printf(ch + " ");
            ch ++;
            count ++;

            if (count % 13 == 0)
            {
                System.out.println();
            }
        }

        System.out.println();
        ch = 'a';
        count = 0;
        for(count = 1, ch = 'a';ch <= 'z';ch ++,count ++)
        {
            if(ch == 'x')
                continue;
            System.out.printf(ch + " ");
            if (count % 13 == 0)
            {
                System.out.println();
            }

        }

    }
}

Output:
a b c d e f g h i j k l m
n o p q r s t u v w 

a b c d e f g h i j k l m
n o p q r s t u v w y z 

从上面的例子可以看出,break语句直接退出当层循环(到x直接退出,不再输出),而continue语句只是结束当前循环,并没有退出(只是没有输出x)。

Java 基本语法---流程控制的更多相关文章

  1. Java基础-程序流程控制第一弹(分支结构/选择结构)

    Java基础-程序流程控制第一弹(分支结构/选择结构) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.if语句 1>.if语句的第一种格式 if(条件表达式){ 语句体: ...

  2. Java编程基础——流程控制

    Java编程基础——流程控制 摘要:本文主要介绍Java编程中的流程控制语句. 分类 流程控制指的是在程序运行的过程中控制程序运行走向的方式.主要分为以下三种: 顺序结构:从上到下依次执行每条语句操作 ...

  3. Java中的流程控制(三)

    关于Java中的流程控制 关于Java中的流程控制 4.do while语句 do while语句的功能和while语句差不多,只不过它是在执行完第一次循环后才检测条件表达式的值,这意味着包含在大括号 ...

  4. Java中的流程控制(二)

    关于Java程序的流程控制(二) 关于Java程序的流程控制(二) 3.switch选择语句 switch语句用于将一个表达式的值同许多其他值比较,并按比较结果选择下面该执行哪些语句. switch( ...

  5. Java中的流程控制(一)

    程序的流程控制(一) 关于Java程序的流程控制(一) 从结构化程序设计角度出发,程序有三种结构: 顺序结构 选择结构 循环结构 1.顺序结构 就是程序从上到下一行行执行,中间没有判断和跳转. 2.i ...

  6. Java基础-程序流程控制第二弹(循环结构)

    Java基础-程序流程控制第二弹(循环结构) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 流程控制有三种基本结构:顺序结构,选择结构和循环结构.一个脚本就是顺序结构执行的,选择结 ...

  7. Java中的流程控制

    1.Java中有几种流程控制?分别是什么? 答:有三种流程控制,分别是顺序流程,分支流程和循环流程 2.分支语句if/else有哪三种形式?分别如何使用? 答:if/if-else-/if-else ...

  8. Java基础语法—流程控制语句

    在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的.所以,我们必须清楚每条语句的执行流程.而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能. 3.1 流程控制语句分类 ​ ...

  9. 赶紧收藏!这些Java中的流程控制知识你都不知道,你凭什么涨薪?

    Java的流程控制 基础阶段 目录: 用户交互Scanner 顺序结构 选择结构 循环结构 break & continue 练习题 1.Scanner对象 之前我们学的基本语法中并没有实现程 ...

随机推荐

  1. 2013长春网赛1001 hdu 4759 Poker Shuffle

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4759 题意:有一堆2^n的牌,牌原先按(1,2,....k)排序,每一次洗牌都将牌分成两种情况:(1, ...

  2. c++/ boost 库常见错误及解决方法总结

    1. error LNK2019: 无法解析的外部符号 "class boost::system::error_category const & __cdecl boost::sys ...

  3. djang-rest-framework学习-day1

    1.老套路:setting 设置复制粘贴!,必要库的安装: 一些库安装失败的解决办法:在 https://www.lfd.uci.edu/~gohlke/pythonlibs/ 上找到下载,然后使用用 ...

  4. BZOJ2597 WC2007剪刀石头布(费用流)

    考虑使非剪刀石头布情况尽量少.设第i个人赢了xi场,那么以i作为赢家的非剪刀石头布情况就为xi(xi-1)/2种.那么使Σxi(xi-1)/2尽量小即可. 考虑网络流.将比赛建成一排点,人建成一排点, ...

  5. Day23-Model操作,Form操作和序列化操作

    参考源出处:http://blog.csdn.net/fgf00/article/details/54629502 1. 搭建环境请参考:http://www.cnblogs.com/momo8238 ...

  6. MT【187】余弦的线性组合

    已知$\alpha+\beta+\gamma=\pi,(\alpha,\beta,\gamma\ge0)$ 求:$3\cos\alpha+4\cos\beta+5\cos\gamma$的最大值____ ...

  7. Graham's Scan法求解凸包问题

    概念 凸包(Convex Hull)是一个计算几何(图形学)中的概念.用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边型,它能包含点集中所有点的.严谨的定义和相关概念参 ...

  8. 如何整合Office Web Apps至自己开发的系统(二)

    WOPI项目的创建 首先用vs2012创建一个mvc4的程序.如图: 从上一篇我们可以知道,WOPI通讯主要通过两个服务: 一个是CheckFileInfo服务, 一个是GetFile服务. 所以下面 ...

  9. luogu1081 [NOIp2012]开车旅行 (STL::multiset+倍增)

    先用不管什么方法求出来从每个点出发,A走到哪.B走到哪(我写了一个很沙雕的STL) 然后把每个点拆成两个点,分别表示A从这里出发和B从这里出发,然后连边是要A连到B.B连到A.边长就是这次走的路径长度 ...

  10. 解题:WC 2018 州区划分

    题面 WC之前写的,补一补,但是基本就是学新知识了 首先可以枚举子集$3^n$转移,优化是额外记录每个集合选取的个数,然后按照选取个数从小到大转移.转移的时候先FWT成“点值”转移完了IFWT回去乘逆 ...