JAVA 基础学习之程序控制流程

水深无声 2023-05-29 05:28 75阅读 0赞

程序控制流程

1 、顺序结构:

  1. 如果代码里没有流程控制,程序是至上而下一行一行执行的,一条语句执行完之后继续执行 下一条语句,直到程序的最后。

2 、分支结构(条件控制)

(1)if控制语句

基本格式:

  1. 三种格式:
  2. if(条件表达式){执行语句;}
  3. if(条件表达式){执行语句;}else{执行语句;}
  4. if(条件表达式){执行语句;}else if (条件表达式){执行语句;}……else{执行语句;}

(2)switch 控制语句

  1. switch语句中case标签在**JDK1.5之前必须是整数(long类型除外)或者枚举,不能是字符串,在JDK1.7之后允许使用字符串(String)。**
  2. 工作原理:用小括号中的变量的值依次和 case 后面的值进行对比,和哪个 case 后面的值相同了 就执行哪个 case 后面的语句,如果没有相同的则执行 default 后面的语句;
  3. switch(变量){
  4. case 表达式可能的结果值 1:
  5. 执行语句;
  6. break
  7. case:表达式可能的结果值 2:
  8. 执行语句;
  9. break
  10. default
  11. 执行语句;
  12. break//最后这个一般不写
  13. }

注意

1):break 是可以省略的,如果省略了就一直执行到遇到 break 为止;

2 ):default 可以写在 switch 结构中的任意位置; 如果将 default 语句放在了第一行,则 不管 expression 与 case 中的 value 是否匹配,程序会从 default 开始执行直到第一个 break 出 现。

(先执行case,如没有匹配到时再执行default)

这些语句什么时候用?

1)、当判断固定个数的值的时候,可以使用 if ,也可以使用 switch 。 但是建议使用 switch ,效率相对较高。

2)、当判断数据范围,获取判断运算结果 boolean 类型时,需要使用 if 。

3)、当某些语句需要执行很多次时,就用循环结构。

总结:多选择结构和switch的关系:如果布尔条件表达式是等值的情况,可以使用switch,也可以使用多重选择结构;如果布尔条件表达式区间判断的情况,则使用多重选择结构。

3 循环结构

while:事先不需要知道循环执行多少次;

do while:同上,只是至少要执行一次(先做,后判断);

for:需要知道循环次数;

(1)while 循环

格式:

  1. while(条件表达式){执行语句;}

(2) do….while 循环

格式:

  1. do{执行语句}while(条件表达式);

(3)for循环

格式:

  1. for(初始化表达式(1);循环条件表达式(2);循环后的操作表达式(迭代因子)(3)) {
  2. 执行语句;(4
  3. }
  4. 执行顺序:(1) (2) (4) (3) (2) (4) (3)
  5. 迭代因子控制循环变量的增减

注意

1、while 与 for 可以互换

区别在于 for 为了循环而定义的变量在 for 循环结束就在内存中释放。

而 while 循环使用的变量在循环结束后还可以继续使用。

2、最简单无限循环格式:while(true) , for(;;),无限循环存在的原因是并不知道循环多少次,

而是根据某些条件,来控制循环。

如何合理地使用while 与 for呢?

当明确循环次数的时,建议使用for 循环。

当不明确循环次数时,建议使用while 循环。

总结:while 和do while的区别:while 先判断,后执行;do while 先执行,后判断。

4 break语句和continue语句

4.1 break 语句

  1. break用于强行退出循环,不执行循环中剩余的语句。

4.2 continue 语句

  1. continue 语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。

注意

  1. continue用在while,do-while中,continue 语句立刻跳到循环首部,越过了当前循环的其余部分。

  2. continue用在for循环中,跳到for循环的迭代因子部分。

4.3 带标签break和continue:

  1. public class Test18 {
  2. public static void main(String args[]) {
  3. outer: for (int i = 101; i < 150; i++) {
  4. for (int j = 2; j < i / 2; j++) {
  5. if (i % j == 0){
  6. continue outer; //退出到标签指定地。
  7. }
  8. }
  9. System.out.print(i + " ");
  10. }
  11. }
  12. }

总结:break:退出整个循环(仅限于当前所在的循环体,不再循环剩下的循环次数),

continue:退出本次循环,本次下面的循环体不执行,继续执行前面的循环,带标签的break和continue可以退出到标签指定地。

#

#

5、方法

5.1、概述:

  1. 方法就是一段用来完成特定功能的代码片段,类似于其它语言的函数。

5.2 方法声明格式:

  1. [修饰符1 修饰符2 …] 返回值类型 方法名(形式参数列表){ Java语句;… }

5.3 方法的调用方式:

对象名.方法名(实参列表)

方法的详细说明

  1. 形式参数:在方法声明时用于接收外界传入的数据。

  2. 实参:调用方法时实际传给方法的数据。

  3. 返回值:方法在执行完毕后返还给调用它的环境的数据。

  4. 返回值类型:事先约定的返回值的数据类型,如无返回值,必须显示指定为为void。

6、方法的重载

6.1 定义:

  1. 方法的重载是指一个类中可以定义多个方法名相同,但参数不同的方法。 调用时,会根据不同的参数自动匹配对应的方法。(方法名相同,形参列表不同)

注意:

构成方法重载的条件:

  1. 1.不同的含义:形参列表(形参类型、形参个数、形参顺序不同)
  2. 2.只有返回值不同不构成方法的重载
  3. 3.只有形参的名称不同,不构成方法的重载

总结:方法名相同,形参列表(形参类型、形参个数、形参顺序不同)

7、递归结构

  1. 递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。
  2. 递归结构包括两个部分:

1.定义递归头。所谓的递归头就是结束条件

  1. 2.递归体。也就是循环体
  2. public class Test22 {
  3. public static void main(String[] args) {
  4. long d1 = System.currentTimeMillis();
  5. System.out.printf("%d阶乘的结果:%s%n", 10, factorial(10));
  6. long d2 = System.currentTimeMillis();
  7. System.out.printf("递归费时:%s%n", d2-d1); //耗时:32ms
  8. }
  9. /** 求阶乘的方法*/
  10. static long factorial(int n){
  11. if(n==1){//递归头
  12. return 1;
  13. }else{//递归体
  14. return n*factorial(n-1);//n! = n * (n-1)!
  15. }
  16. }
  17. }

缺陷: 简单的程序是递归的优点之一。但是递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次多时速度要比循环慢的多,所以在使用递归时要慎重。

注意:

  1. 任何能用递归解决的问题也能使用迭代解决。在要求高性能的情况下尽量避免使用递归,递归调用既花时间又耗内存。

总结:递归定义是:一个使用递归技术的方法将会直接或者间接的调用自己,优点:程序简单,缺点:占内存,耗时间,耗资源

发表评论

表情:
评论列表 (有 0 条评论,75人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java基础Java流程控制

    > 块(即复合语句)是指由一对大括号括起来的若干条简单的 Java 语句。块确定了变量的作用域。一个块可以嵌套在另一个块中。但是,不能在嵌套的两个块中声明同名的变量。使用块(有

    相关 Java基础流程控制

    上次的运算符都消化好了吗?每一天都要用到一些哦~ 以前有提到过一嘴,程序执行都是从上到下执行的,emm,学到这里,感觉这句话是对的也是错的了…… 如果都是一行一行执行下去的