数组

任务

1.开发工具eclipse的介绍
2.数组的声明和初始化
3.数组的元素访问以及遍历
4.数组的应用(冒泡排序、选择排序、顺序查找和二分法查找)
5.Arrays工具类的使用
6.可变参数的应用

教学目标

1.了解eclipse工具的基本使用
2.掌握数组的声明和初始化
3.掌握数组的使用
4.掌握数组的排序和查找
5.了解Arrays工具类的使用
6.了解可变参数的使用

第一节 开发工具的介绍

1.1 工作空间的概念
工作空间(workspace),是用户在同一个工程中(或者是一个事务)工作环境的集合,简单来说,就是项目存放的位置
就是你项目存放的位置:项目,文件,文件夹
工作空间有明显的层次结构。项目在最顶级,项目里头可以有文件和文件夹
1.2 常用快捷键的介绍
ctrl+D:删除一行
ctrl+shift+f:格式化代码
ctrl+S:保存文件
ctrl+shift+o:导包
ctrl+alt+方向键上下键:向上或向下复制
alt+方向键的上下键:向上或向下移动
alt+shift+j:文档注释
ctrl+/:单行注释
ctrl+/:取消单行注释
ctrl+shift+/:多行注释
ctrl+shift+\:取消多行注释
shift+enter:强制换行
ctrl+f11:运行
1.3 其他使用
可参考http://www.runoob.com/eclipse/eclipse-create-java-project.html

第二节 数组

2.1 数组的声明
方式一:数据类型[] 数组名		

	方式二:数据类型 数组名[] 

	推荐使用方式一,c#等越来越多的语言已经不支持方式二定义数组		
2.2 数组的初始化
	Java中的数组必须先初始化,然后才可以使用,所谓初始化,就是为数组中的数组元素分配内存空间,并为每个数组元素赋初始值

2.2.1 静态初始化

初始化时由程序员指定每个数组元素的初始值,由系统计算数组长度

	语法:数组元素类型[] 数组名 = new 数组元素类型[]{元素0,元素1,....};

	可简写为:数组元素类型[] 数组名 = {元素0,元素1,....};

	说明:任何一个变量都得有自己的数据类型,这里的arr表示数组变量名称,int表示数组中元素的类型,int[]才是数组类型

代码实现:

 

2.2.2 动态初始化

初始化时程序员只指定数组长度,由系统为数组元素分配初始值

	语法:元素类型[] 数组名 = new 元素类型[元素个数或者数组长度];

	系统对初始值分配规则如下:a.整数型为0

							    b.浮点型为0.0
							    c.字符型为‘\u0000’(不同的系统平台显示结果不同)
							    d.布尔类型为false
							    e.引用类型为null

代码实现:

 
注意:
	a.在初始化数组时,不要静态初始化和动态初始化同时使用,也就是说,不要在进行数组初始化时,既指定数组的长度,也为每个数组元素分配初始值
	b.既然数组也是一种数据类型,则在初始化的时候也可以先声明,再初始化
		例如:int[] scores;
			 scores = new int[3];
2.3 数组的使用

2.3.1 通过下标访问指定元素

注意:Java语言的数组索引是从0开始的

代码实现:

 

2.3.2 获取数组元素的个数

	在Java中,所有数组都提供了一个length属性,通过这个属性可以访问到数组的长度或者数组中元素的个数

代码实现:

 

2.3.3 修改数组元素的值

代码实现:

 

2.3.4 遍历数组

依次访问数组中的每一个元素,获取每个下标对应的元素值
方式一:简单for循环
方式二:增强for循环

代码实现:

 

​ 2.3.5 内存中的数组

数组引用变量只是一个引用,这个引用变量可以指向任何有效的内存空间,只有当这个引用指向有效的空间时,才可以通过引用去操作真正数组中的元素

结论:数组的引用变量存储在栈空间中,而真正的数组存储在堆空间在中

代码实现:

 

画图分析:

内存中的数组一

扩展:基本数据类型和引用数据类型在内存中的区别
思考问题:
	int a = 10;
	int b = a;
	b = 20;
	a = ? -------->10,而且a和b都存储在栈空间中

	int[] x = {22,33};
	int[] y = x;
	y[0] = 55;
	x[0] = ?--------->55,x和y都存储在栈空间中,但是真正的数组存储在堆空间中

扩展:内存的分类
	a.寄存器:最快的存储区域,由编译器根据需求进行自动的分配,我们在程序中无法控制
	b.栈:存放的是基本数据类型的变量以及引用数据类型变量的引用
		特点:被执行之后,该函数或者变量所占用的空间会被销毁【方法压栈】
	c.堆:存放所有使用new关键字创建出来的实体
		特点:执行完不会立即被释放,当使用完成之后,会被标记上垃圾的标识,等待系统的垃圾回收机制来回收它
	d.方法区:
		常量池:存放基本数据类型的常量和字符串常量
		静态域:static,静态全局变量

2.3.6 使用数组时常见的问题

1>数组越界异常:ArrayIndexOutofBoundsException

		出现的时机:当使用了不存在的下标时,则会出现这个错误
		0~length - 1

2>空指针异常:NullPointerException
		出现的时机:当数组的引用变量赋值为null,还在后面的代码中使用这个引用

3>基本数据类型和引用数据类型打印的区别

代码实现:

 
2.4 数组的排序

2.4.1 冒泡排序

排序思路:比较两个相邻的下标对应的元素,如果符合条件就交换位置(最值出现在最后位)

画图分析冒泡排序

代码实现:

 

2.4.2 选择排序

排序思路:固定一个下标,然后拿这个下标对应的值依次和后面的元素进行比较

画图分析:

选择排序

代码实现:

 
2.5 数组的查找

2.5.1 顺序查找

查找思路:遍历这个数组,依次把每一位元素和要查找的数据进行比较

代码实现:

 

2.5.2 二分法查找

查找思路:前提是数组是有序(升序或者降序)的,通过折半来缩小查找范围,提高查找效率

将待查找的元素与中间下标对应的元素比较,如果大于中间下标对应的元素,则去右半部分查找

画图分析:

二分法查找

代码实现:

 
2.6 Arrays工具类
 

代码实现:

 
2.7 可变参数
不定长参数

	在设计方法时,方法的形参的个数是不确定的

	语法
	类型... 变量名称
	例如:int... num

代码实现:

 
 

总结

 

课前默写

1.使用if语句实现判断一个数是否是5的倍数
2.根据键盘输入的数字,打印对应的星期(注:可以不全写)
3.求50~200之间所有整数的和

作业

 

面试题