• 第三章:流程控制语句


    第三章:流程控制语句


    程序结构
    顺序结构
    分支结构

    if结构
    if....else结构
    if...else if....else if...else结构
    switch结构


    循环结构

    while循环
    do....while循环
    for循环


    分支结构
    if结构

    if结构语法:

    if(布尔表达式){
    //语句;
    }

    执行过程:如果布尔表达式为true执行其下语句,布尔表达式为false时不执行其下语句。
    {}可以省略,如果省略将执行第一个语句块。为了程序的可读性推荐不要省略{}


    if...else结构

    语法:
    if(布尔表达式){
    //语句1
    }else{
    //语句2;
    }

    执行过程:如果布尔表达式值为true,执行语句1,否则执行语句2.
    {}也是可以省略的,省略之后只执行第一个语句块。


    if....else if....else结构

    语法:
    if(条件1){
    //语句1;
    }else if(条件2){
    //语句2;
    }else if(条件3){
    //语句3
    }....{
    }else{
    //语句N;
    }
    执行过程:先判断条件1是否成立,如果条件1成立执行语句1并跳出条件结构;如果条件1不成立继续判断其下的条件2,如果条件2成立执行语句2....,所有条件都不成立执行else中语句N.

    注意:条件的位置有可能影响执行结构,条件位置一般需要满足从范围小的条件到范围大的条件逐次摆放。


    switch结构

    switch可以代替多重if条件结构中等值判断。
    语法:
    switch(表达式){
    case 值1:
    语句1;
    [break];
    case 值2:
    语句2;
    [break];
    .....
    default
    语句N;
    [break];
    }

    执行过程:将表达式的值与case中的常量值挨个进行比较,如果匹配成功将执行其下语句,直到遇到break关键字跳出switch结构。
    注意:
    1.swtich中传入的表达式可以是byte,short,int,char,从JDK1.7以后支持String类型
    2. case后的常量值不能重复
    3.case语句中的break是可以省略的,但如果省略break将出现case穿透。
    4. default语句也是可以省略的。


    循环结构
    while循环

    语法:
    while(布尔表达式){
    //循环体
    }

    执行过程:
    步骤1:先判断布尔表达式值是否为true,如果为true进入步骤2
    步骤2:执行while中循环体,执行结束后回到步骤1

    特点:先判断,后执行,有可能一次都不执行。


    do...while循环

    语法:
    do{
    //循环体;
    }while(布尔表达式);
    执行过程
    步骤1:先执行循环体,进入步骤2
    步骤2:判断布尔表达式是否为true,如果值为true,执行步骤1,否则退出循环。
    特点:先执行,后判断。执行会执行1次。


    for循环

    语法:
    for(表达式1;表达式2;表达式3){
    //循环体;
    }
    表达式1:循环变量的初始化,只会执行1次
    表达式2:循环条件
    表达式3:更改循环变量(步进)
    注意:从语法的角度上说表达式1,表达式2,表达式3都可以省略,分号不能省略。但是如果省略了表达式2和表达式3经常会造成死循环。

    执行过程:
    步骤1:先执行表达式1进行循环变量的初始化工作
    步骤2:执行表达式2进行循环条件的判断,如果条件为true,执行步骤3,否则退出循环。
    步骤3:执行循环体;
    步骤4:执行表达式3进行更改循环变量,然后执行步骤2。


    break关键字

    break关键字
    可以用于switch结构和循环结构
    作用:
    1.如果用于switch结构,跳出当前的case语句
    2.如果用于循环结构中,跳出当前循环结构。


    continue关键字

    continue关键字只能用于循环结构。
    作用:跳过本次循环,重新开始下一趟循环。


    循环嵌套

    一个循环结构中嵌套了其他的循环结构。
    特点:只有当内层循环结束后,才会执行下一次的外层循环(外层循环一次,内层循环可能循环多次)。


    矩形

    **********
    **********
    **********


    直角三角形

    ***
    **
    *


    平行四边形

    *********
    *********
    *********


    正等腰三角形

    *
    ***
    *****
    *******


    倒等腰三角形

    *****
    ***
    *


    菱形

    *
    ***
    *****
    *******
    *****
    ***
    *


    百元百鸡

    公鸡5元/只,母鸡3元/只,小鸡1元3只,问100元买100只鸡如果购买?


    斐波那契数列

    兔子问题:
    1对兔子,从第三个月开始每个月可以生一对小兔子,小兔子从三个月开始每个月也可以再生一对小兔子,假设兔子不死,问1年后共多少对兔子?
    斐波那契数列:
    1 1 2 3 5 8 13....

    f(n)=f(n-1)+f(n-2)
    n>=3


    九九乘法表

    1*1=1
    2*1=2 2*2=4
    3*1=3 3*2=6 3*3=9
    ....


    更改循环结构的三个关键字
    break

    break在循环嵌套中使用,可以跳出当前循环结构。
    continue

    continue用于跳过本次循环,从新开始下一趟循环。
    return

    严格意义上不是专门为更改循环结构而设计的,它的主要结构是退出当前方法(函数)


    方法
    方法的定义

    方法:为了完成某些功能而封装了某些代码的集合。
    方法的定义:
    [修饰符] 返回值类型 方法名(形参列表){
    方法体;
    return 返回值;
    }
    修饰符:封装时会详细介绍,今天代码的修饰符:public static
    返回值类型:如果有返回值,其返回值类型可以是任何类型,如果没有返回值,可以定义为void
    是否需要返回值的判断依据:其他方法是否需要使用当前方法的处理结果。
    如果其他方法需要使用当前方法的处理结果,需要返回值,否则可以不要返回值
    方法名:满足标识符的命名规则
    参数列表:可以有参数,也可以没有参数。
    是否需要参数的判断依据:当前方法是否需要使用其他的方法中的值。
    如果当前方法需要使用其他方法的值,需要以参数的方式进行传入,否则可以不要参数
    返回值:java中返回值只有1个,其类型必须与返回值类型向对应。
    参数:
    形式参数:在方法定义时,用于限制该方法需要的参数的类型和个数。(int rows,int cols)
    实际参数:在方法调用时,具体传入的值。(5,10)
    注意:在方法调用时,实际参数的类型和个数必须与形式参数相对应。

    方法的调用:
    情况1:如果在同一个类中,直接使用方法名就可以调用。printRectangle();
    情况2:通用的静态方法的调用方式: 类名.方法名(); TestMethod.printRectangle();
    public class TestMethod{

    //无参数,无返回值
    public static void printRectangle(){
    for(int i=0;i<3;i++){
    for(int j=0;j<8;j++){
    System.out.print("*");
    }
    System.out.println();//换行
    }
    }
    //有参数,无返回值
    public static void printRectangle2(int rows,int cols){
    for(int i=0;i<rows;i++){
    for(int j=0;j<cols;j++){
    System.out.print("*");
    }
    System.out.println();
    }
    }
    //无参数,有返回值
    public static double calcArea(){
    int r=2;//半径
    final double PI=3.14;
    double s = PI*r*r;
    return s;//返回值
    }
    //有参数,有返回值
    public static double calcArea2(int r){
    final double PI=3.14;
    double s = PI*r*r;
    return s;
    }

    public static void main(String[] args){
    //printRectangle();
    //TestMethod.printRectangle(); //无参数,无返回值
    //TestMethod.printRectangle2(15,10);//有参数,无返回值
    //double s = TestMethod.calcArea();//无参数,有返回值
    double s = TestMethod.calcArea2(4);//有参数,有返回值
    System.out.println("圆的面积为:"+s);

    }
    }


    方法的重载

    方法的重载:在同一个类中,方法名参数列表不同。
    参数列表不同:
    1.个数不同
    2.类型不同
    3.顺序不同
    在方法调用时,会根据参数的类型,个数和顺序自动匹配到响应的方法
    public class TestMethod2{

    public static int add(int a,int b){
    return a+b;
    }

    public static double add(int a,double b){
    return a+b;
    }
    public static double add(double a,int b){
    return a+b;
    }
    public static double add(double a,double b){
    return a+b;
    }

    public static void main(String[] args){
    double result = TestMethod2.add(1.0,2.0);
    System.out.println("result="+result);
    }
    }


    递归

    递归:在程序中方法(函数)自身调用自身的一种行为。
    使用场景:将一个复杂的问题可以分解为若干子问题,每个子问题的解决方案与上一层一致。
    编写递归时需要注意:递归的条件和递归体
    递归条件:类似于循环条件,做什么时候为止不再调用自身,如果缺少条件将会造成死循环。
    递归体:类似于循环体,重复做的事情。

    递归的优点:编写简单,更加贴近人类的思维习惯。
    递归的缺点: 1.大量占用系统堆栈,对内存的消耗较大。
    2.递归调用耗时较长。
    注意:所有利用递归解决的问题都可以使用循环(迭代)解决;不推荐过多使用递归,应为递归既耗时又耗用资源。

    public class TestMethod3{

    //计算N的阶乘
    public static long factorial(int n){
    if(n==1){
    return 1;
    }else{
    return n*factorial(n-1);
    }
    }
    //斐波那契数列:f(n)=f(n-1)+f(n-2)
    public static long fibonacci(int n){
    if(n==1||n==2){
    return 1;
    }else{
    return fibonacci(n-1)+fibonacci(n-2);
    }
    }

    public static void main(String[] args){
    //long result = factorial(5);
    long result = fibonacci(12);
    System.out.println("result="+result);
    }
    }

  • 相关阅读:
    CSS基础应用学习系列(3)——图像的CSS阴影效果
    激活flash控件
    用一句SQL取出第 m 条到第 n 条记录的方法
    javascript检测浏览器和操作系统detect.js
    开始学习VS2008+.net3.5咯 :)
    用GridView编辑更新独立的单元格
    征服ASP.NET Ajax典型应用 (试读)
    CSS基础应用学习系列(4)――用CSS对列表应用样式
    Android SQLite学习指南
    Java内部类使用总结
  • 原文地址:https://www.cnblogs.com/panwenshuai/p/6977955.html
Copyright © 2020-2023  润新知