本文已参与「新人创作礼」活动,一起开启掘金创作之路。
程序流程控制
-
程序流程控制
- 可以嵌套使用
-
顺序结构
- 程序从上往下逐行执行,中间没有任何判断或跳转
- 定义成员变量时采用合法的向前引用
-
分支结构
- 根据条件,选择性地执行某段代码;
-
有if......else和switch两种分支语句。
- switch(表达式)中表达式的返回值必须是下述几种类型之一:byte、short、char、int、枚举、String;
- case句子中的值必须是常量,且所有case子句中的值应是不同的;
- default子句是可选的,当没有匹配的case时,执行dedault;
- break语句用来执行完一个case分支后使程序跳出switch语句块,如果没有break,程序会顺序执行到switch结尾。
-
if和switch对比(当不知道使用if或者switch时可都是用if)
- 如果判断的具体数值不多,而且符合byte、short、int、char四种类型,switch效率更高。
- 其他情况:对区间判断,对结果为boolean类型判断,使用if。
-
循环结构
- 根据循环条件,重复性执行某循环语句;
-
循环语句的四个组成部分
- 初始化部分
- 循环条件部分
- 循环体部分
- 迭代部分
-
for循环语句、while循环语句、do……while循环语句
- 注意:嵌套循环最好是外层循环次数小于内层循环次数
-
特殊流程控制语句
- break语句:终止当前所在的整个循环,
- continue语句:结束当前所在循环的这一次执行,直接进入下次循环,并不是直接跳出此循环
- return语句:结束整个方法
- 注:break只能用于switch语句和循环语句,continue只能用于循环语句,continue是终止本次循环,break是终止本层循环,break和continue之后不能有其他语句,因为永远不会执行。
- 注:JDK1.5之后提供了foreach循环,方便遍历集合、数组元素。
一维数组
-
一维数组
- 声明:type var[]或type[] var;
-
初始化
- 动态初始化:数组声明且为数组元素分配空间与赋值操作分开进行。例如:int[] arr=new int[2];arr[0]=1;arr[1]=2;
- 静态初始化:在定义数组的同时就为数组元素分配空间并赋值。例如:int[] arr=new int[]{1,2}。
-
引用:
- 数组名【数组元素下标】
- 每个数组都有一个属性length指明长度,例如:a.length指明数组a的长度(元素个数)。数组一旦初始化,其长度是不可变的。
- 使用动态初始化的时候,数组元素会有默认值,数字类型的默认值是0,对象的默认类型是null。
多维数组
-
多维数组
-
初始化
- 动态初始化:int[][] arr=new int[3][2];或者int[][] arr=new int[3][]; int[][] arr=new int[][2];错误
- 静态初始化:int[][] arr=new int[][]{{1,2,3},{1,1,1}};
- 特殊写法:int[] x,y[];x是一个一维数组,y是一个 二位数组
- 练习二维数组求和
- 练习概念
-
数组中涉及的常见算法
-
数组中涉及的常见算法
- 求数组元素的最大值、最小值、总和、平均数
- 数组的复制、反转
-
数组元素的排序
-
插入排序
- 直接插入排序、折半插入排序、shell排序
-
交换排序
- 冒泡排序、快速排序(或分区交换排序)
-
选择排序
- 简单选择排序、堆排序
- 归并排序
- 基数排序
-
-
数组操作常见问题
- 数组下标越界异常(ArrayIndexOutOfBoundsException) int[] arr=new int[2]; System.out.println(arr[2]); 访问到了数组中的不存在的脚标时发生
- 空指针异常(NullPointerException) int[] arr=null; System.out.println(arr[0]); arr引用没有指向实体,却在操作实体中的元素时
-
作业