流程控制语句结构

一、顺序结构

  1. public static void main(String[] args){
  2.     //顺序执行,根据编写的顺序,从上到下运行
  3.     System.out.println(1);
  4.     System.out.println(2);
  5.     System.out.println(3);
  6. }

二、复合语句

  1. Java语言的复合语句是以整个块区为单位的语句,所以又称为块语句。复合语句由开括号“{”开始,闭括号“}”结束。
  2. 复合语句中的每一语句都是从上到下执行。复合语句以整个块为单位,并且在复合语句中可以嵌套复合语句。
  1. class 类{
  2.                  {       
  3.                        //代码块
  4.                  }
  5.                 方法签名{
  6.                          //方法体
  7.                  }
  8.                 内部类{
  9.                        内部类体
  10.                  }
  11.          }
  1. 复合语句为变量创建了一个作用域。在该作用域中某个变量被创建并能够使用,如果在某个变量的作用域外使用该变量,则会发生错误。

三、分支结构

1、条件判断(if...else)

1.每个if或者else后面的{}不是必须的,但是如果没有{},默认只能带一条语句。即if或else后面的语句块只有一条语句时,可以省略{},但是可读性不够好。

2.最后的else不是必须的,可以缺省

3.当多个条件是互斥关系时,顺序无所谓

4.当多个条件是包含关系时,“小上大下/子上父下”

2、选择结构(switch...case)

  1. 语法格式
  1. switch(表达式){
  2.          case 常量值1:
  3.                    语句块1;
  4.                    break;
  5.          case 常量值2:
  6.                    语句块2;
  7.                    break;
  8.          case 常量值3:
  9.                    语句块3;
  10.                    break;              
  11.          ....
  12.          default
  13.                    语句块n+1;
  14.                   break;      
  15. }

说明:

default的分支,可以在任意位置,只是习惯上我们写在最后,但是不管在哪里,都是先判断case的值,然后再去看default。

  1. 执行特点

要求:

(1)case后面必须是常量

(2)case后面的常量值不能重复

(3)case后面的常量值必须与switch(表达式)的类型一致或兼容

(4)switch(表达式)的类型只能是如下几种类型

         四种基本数据类型:byte,short,int,char

         两种引用数据类型:JDK1.5枚举,JDK1.7String

  1. 代码实现
  1. /*
  2. 12 * default不是必须的,也可以不写
  3. 13 * 输出:case two
  4. 14 */
  5. 15 private static void defautTest() {
  6. 16 char ch = 'A';
  7. 17 switch (ch) {
  8. 18 case 'B':
  9. 19 System.out.println("case one");
  10. 20 break;
  11. 21 case 'A':
  12. 22 System.out.println("case two");
  13. 23 break;
  14. 24 case 'C':
  15. 25 System.out.println("case three");
  16. 26 break;
  17. 27 }
  18. 28 }
  19. 29
  20. 30 /*
  21. 31 * case语句中少写了break,编译不会报错
  22. 32 * 但是会一直执行之后所有case条件下的语句,并不再进行判断,直到default语句
  23. 33 * 下面的代码输出: case two
  24. 34 * case three
  25. 35 */
  26. 36 private static void breakTest() {
  27. 37 char ch = 'A';
  28. 38 switch (ch) {
  29. 39 case 'B':
  30. 40 System.out.println("case one");
  31. 41
  32. 42 case 'A':
  33. 43 System.out.println("case two");
  34. 44
  35. 45 case 'C':
  36. 46 System.out.println("case three");
  37. 47 default:
  38. 48 break;
  39. 49 }
  40. 50 }
  41. 51
  42. 52 /**
  43. *switch用于判断String类型
  44. 54 * 输出:It's OK!
  45. 55 */
  46. 56 private static void stringTest() {
  47. 57 String string = new String("hello");
  48. 58 switch (string) {
  49. 59 case "hello":
  50. 60 System.out.println("It's OK!");
  51. 61 break;
  52. 62
  53. 63 default:
  54. 64 System.out.println("ERROR!");
  55. 65 break;
  56. 66 }
  57. 67 }

四、循环结构

1、for循环

  1. for循环第一种格式
  1. for(初始化语句①; 循环条件语句②; 迭代语句④){
  2. 循环体语句③
  3. }

注意:

(1)循环条件必须是boolean类型

(2)如果循环条件语句②省略的话,就默认为循环条件成立

  1. for循环第二种格式

    for(int i:a)解释是:先设置一个与a数组里的元素相同的变量,这个变量先等于a数组的第一个元素,然后进入循环体,第二次循环就等于a数组的第二个元素,进入循环体,以此类推。
  1. int[][] dirc = {{1,0},{0,1},{-1,0},{0,-1}};
  2. int lengthI = dirc.length;
  3. int lengthJ = dirc[0].length;
  4. System.out.println(lengthI); // 4
  5. System.out.println(lengthJ); // 2
  6. for (int[] dire: dirc) {
  7. int length = dire.length; // 每次从dirc[][]中取出一行元素放入dire[]中,因此length为dirc[][]的dirc.length
  8. // dire[i] = dirc[i][]
  9. System.out.println(length); // 2
  10. }

2、while循环

  1. while循环语句标准格式:
  1. while (循环条件语句①) {
  2.    循环体语句②;
  3. }
  1. while循环语句扩展格式:
  1. 初始化语句①;
  2. while (循环条件语句②) {
  3.    循环体语句③;
  4.    迭代语句④;
  5. }

do...while循环

  1. do...while循环标准格式:
  1. do {
  2.    循环体语句①;
  3. } while (循环条件语句②);
  1. do...while循环扩展格式:
  1. 初始化语句①
  2. do {
  3.    循环体语句②;
  4.    迭代语句③;
  5. } while (循环条件语句④);
  1. 注意:

(1)while(循环条件)中循环条件必须是boolean类型

(2)do{}while();最后有一个分号

(3)do...while结构的循环体语句是至少会执行一次,这个和for和while是不一样的

  1. public static void main(String[] args) {
  2. Scanner in = new Scanner(System.in);
  3. int positive = 0;
  4. int nagetive = 0;
  5. int num;
  6. // 注意,num = in.nextInt();不可定义在初始语句,会造成死循环
  7. do {
  8. System.out.println("请输入整数(0)结束:");
  9. num = in.nextInt();
  10. if (num > 0) {
  11. positive++;
  12. } else if (num < 0) {
  13. nagetive++;
  14. }
  15. } while (num != 0);
  16. System.out.println(positive);
  17. System.out.println(nagetive);
  18. }

4、循环语句的区别

  1. 从循环次数角度分析:

do...while循环至少执行一次循环体语句

for和while循环先循环条件语句是否成立,然后决定是否执行循环体,至少执行零次循环体语句

  1. 从循环变量的生命周期角度分析

for循环的循环变量在for()中声明的,在循环语句结束后,不可以被访问;

while和do...while循环的循环变量因为在外面声明的,所以while和do...while结束后可以被继续使用的;

  1. 如何选择

遍历有明显的循环次数(范围)的需求,选择for循环

遍历没有明显的循环次数(范围)的需求,循环while循环

本质上:三种循环之间是可以互相转换的,都能实现循环的功能

  1. 三种循环结构都具有四要素:

(1)循环变量的初始化表达式

(2)循环条件

(3)循环变量的修改的迭代表达式

(4)循环体语句块

5、控制语句区别

  1. break

break用于完全结束一个循环,跳出循环体。不管是哪种循环,一旦在循环体中遇到break,系统将完全结束循环,开始执行循环之后的代码。 break不仅可以结束其所在的循环,还可结束其外层循环。此时需要在break后紧跟一个标签,这个标签用于标识一个外层循环。Java中的标签就是一个紧跟着英文冒号(:)的标识符。且它必须放在循环语句之前才有作用。

  1. public static void main(String[] args) {
  2. // 外层循环,outer作为标识符
  3. outer:
  4. for (int i = 0; i < 2; i++) {
  5. System.out.println("外层循环第:" + i);
  6. for (int j = 0; j < 3; j++) {
  7. System.out.println("内层循环第:" + j);
  8. // 跳出outer标签所标识的循环
  9. break outer;
  10. }
  11. }
  12. }
  13. // 外层循环第:0
  14. // 内层循环第:0
  1. continue

continue的功能和break有点类似,区别是continue只是中止本次循环,接着开始下一次循环。而break则是完全中止循环。

  1. public static void main(String[] args) {
  2. for (int i = 0; i < 4; i++) {
  3. System.out.println("循环第:" + i);
  4. if (i == 1){
  5.          // 忽略本次循环的剩下语句
  6.          continue;
  7.        }
  8. }
  9. }
  10. // 循环第:0
  11. // 循环第:2
  12. // 循环第:3
  1. return

return关键字并不是专门用于跳出循环的,return的功能是结束一个方法。 一旦在循环体内执行到一个return语句,return语句将会结束该方法,循环自然也随之结束。与continue和break不同的是,return直接结束整个方法,不管这个return处于多少层循环之内。

  1. public static void main(String[] args){
  2.     // 一个简单的for循环
  3.     for (int i = 0; i < 3 ; i++ ){
  4.       System.out.println("i的值是" + i);
  5.       if (i == 1){
  6.         return;
  7.       }
  8.       System.out.println("return后的输出语句");
  9.     }
  10.   }
  11.   // i的值是0
  12. // return后的输出语句
  13. // i的值是1

部分内容参考:原文链接:https://blog.csdn.net/weixin_41043145/article/details/93780940

JavaSE之流程控制结构的更多相关文章

  1. scala中如何编写自定义的流程控制结构

    scala是一种函数式编程风格的语言,除了常见的if......else  ,for ,while等传统的流程控制结构,也可以自定义流程控制的控制结构. 再了解scala如何实现编写新的流程结构,我们 ...

  2. java基础(5)--流程控制结构

    流程控制结构 if结构 当关系表达式为true时,执行语句 if(关系表达式){ //语句块 } if-else结构 当关系表达式为true时,执行语句块1,否则执行语句块2 if(关系表达式){ / ...

  3. (八)MySQL事务、视图、变量、存储过程、函数、流程控制结构

    补充:增删查改语句在数据库中基本通用,但这篇博客的内容基本是MySQL区别于其它数据库管理系统的知识,也要认真学习. 一.事务 1.含义:在MySQL中,可以通过创建事务来解决一些问题. 2.语法: ...

  4. Mysql基础(十一):流程控制结构、分支结构、循环结构

    流程控制结构 说明:顺序结构:程序从上往下依次执行分支结构:程序按条件进行选择执行,从两条或多条路径中选择一条执行循环结构:程序满足一定条件下,重复执行一组语句 分支结构 特点:1.if函数功能:实现 ...

  5. JavaSE基础知识(3)—流程控制结构

    一.顺序结构 1.说明 程序从上往下依次执行,中间没有任何跳转或选择2.特点 变量必须遵循 “前向引用” (局部变量必须先声明.赋值,然后再使用!) 二.分支结构(条件) 1.说明 程序从两条或多条路 ...

  6. PHP流程控制结构之分支结构

    流程控制对于任何一门编程语言来说都是具有通用与普遍性的,是程序的重要组成部分.可以这么说,在任何一门程序设计语言中,都需要支持三种基本结构:顺序结构.分支结构(选择结构或条件结构)和循环结构.对于顺序 ...

  7. Java的流程控制结构,细节详解

    位运算符 &与 |或 ^异或 <<左移 >>右移 >>>无符号右移  ~取反 注意:位运算是针对整数运算的 int i = 6,j = 10; 方式一 ...

  8. Go基础系列:流程控制结构

    条件判断结构:if else 分支选择结构:switch case 循环结构:for break:退出for或switch结构(以及select) continue:进入下一次for迭代 虽然Go是类 ...

  9. java流程控制结构

    一.流程控制分三类 1. 顺序结构 - 程序是从上往下,从左往右执行 2. 选择结构(判断结构) - if语句 A. if(关系表达式){语句体} - 执行流程:成立就执行语句体,不成立就不执行 B. ...

随机推荐

  1. springboot使用Jwt处理跨域认证问题

    在前后端开发时为什么需要用户认证呢?原因是由于HTTP协定是不存储状态的,这意味着当我们透过账号密码验证一个使用者时,当下一个request请求时他就把刚刚的资料忘记了.于是我们的程序就不知道谁是谁了 ...

  2. overflow:hidden的清除浮动效果

    我们都知道"overflow:hidden"可以溢出隐藏,即当内容元素的高度大于其包含块的高度时,设置该属性即可把内容区域超出来的部分隐藏,使内容区域完全包含在该包含块中. 然而& ...

  3. C#用Linq对列表/集合进查询

    namespace ---> System.Linq; 使用&&进行多条件查询 也可以直接使用Lambda表达式+扩展方法的写法:

  4. Python 每日一练(3)

    引言 今天的每日一练,学习了一下用Python生成四位的图像验证码,就是我们常常在登录时见到的那种(#`O′) 思路分析 正如常见的那种图像验证码,它是由数字和字母的随机组合产生的,所以我们首先的第一 ...

  5. Java中的集合(七)双列集合顶层接口------Map接口架构

    Java中的集合(七)双列集合顶层接口------Map接口 一.Map接口的简介 通过List接口,我们知道List接口下的集合是单列集合,数据存储是单列的结构.Map接口下是一个键值对(key-v ...

  6. Netty源码学习系列之2-ServerBootstrap的初始化

    前言 根据前文我们知道,NioEventLoopGroup和NioEventLoop是netty对Reactor线程模型的实现,而本文要说的ServerBootstrap是对上面二者的整合与调用,是一 ...

  7. java继承会犯的小错误

    注意事项:阅读本文前应该先了解java的继承.本文定位为已经继承基础知识. 一:试图覆盖私有方法 先上代码 public class Father { private void print() { S ...

  8. Java实现 蓝桥杯VIP 算法提高 3-2求存款

    算法提高 3-2求存款 时间限制:1.0s 内存限制:256.0MB 问题描述 见计算机程序设计基础(乔林)P50第5题. 接受两个数,一个是用户一年期定期存款金额,一个是按照百分比格式表示的利率,计 ...

  9. Java实现 蓝桥杯VIP 算法提高 排队打水问题

    算法提高 排队打水问题 时间限制:1.0s 内存限制:256.0MB 问题描述 有n个人排队到r个水龙头去打水,他们装满水桶的时间t1.t2----tn为整数且各不相等,应如何安排他们的打水顺序才能使 ...

  10. Java实现 蓝桥杯 算法训练 二进制数数

    试题 算法训练 二进制数数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定L,R.统计[L,R]区间内的所有数在二进制下包含的"1"的个数之和. 如5的二进 ...