第4章 数组
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 示例
stack heap
0 0 0 0 0
创建后的 内存情况
int a[ ] ; a = new int[5];
a
0X124
int a[ ] = new int[5];
一维数组
• 数组的内存模型
– 数组是存储多个相同类型变
– – – –
量的对象。数组的所有元素 保存在堆内存中。 创建一个数组就是在堆中创 建一个数组对象。 数组创建后立即拥有默认值。 索引从0开始。 连续分配
int[ ] array ; array = new int [4] ;
示例
Test.java
练习
☻ 练习
说明下列创建数组的方法那些是正确的______。
A) B) C) D) E)
int dim[ ] = new int[4]; int dim[4] = new int[ ]; int dim[ ] = new int[ ]{1,2,3,4}; char a[ ] = {‗A‘, ‗B‘}; char c[ ] = ―ABC‖;
myNumbers myNumbers [[ 1 1 ]] = = 10; 10; myNumbers myNumbers [[ 2 2 ]] = = 15; 15; myNumbers myNumbers [[ 3 3 ]] = = 20; 20;
•
一维数组
• 数组元素的访问
Java中,数组元素的下标从0开始
☻ 练习
Array_copy.java
复制数组{1,2,3,4,5}中从下标0开始的5个元素到目标数组
{6,7,8,9,10,11,12,13,14,15},并从目标数组的下标为0的位置开始储存
数组的操作
• 数组的复制和排序
Arrays.sort(arr_name) Arrays.sort(arr_name,fromIndex,toIndex)
468
课后作业
• 5、 输出一个double型二维数组(长度分别为5、4
,值自己设定)的值。(知识点:数组定义和创 建、多维数组初始化、数组遍历) [必做题] • 6、 在一个有8个整数(18,25,7,36,13,2, 89,63)的数组中找出其中最大的数及其下标。 (知识点:数组遍历、数组元素访问) [必做题] • 7、将一个数组中的元素逆序存放(知识点:数组 遍历、数组元素访问) [选作题] • 8. 将一个数组中的重复元素保留一个其他的清零 。(知识点:数组遍历、数组元素访问) [选作题 ]
本章重点总结
• 一维数组
掌握数组的长度 掌握一维数组的声明、创建、初始化 数组的常见错误
• 多维数组
掌握二维数组的声明、创建、初始化 理解数组的复制 理解数组的排序
课后作业
• 1、编写一个简单程序,要求数组长度为5,分别
赋值10,20,30,40,50,在控制台输出该数组 的值。(知识点:数组定义和创建、一维数组初 始化)[必做题] • 2、将一个字符数组的值(neusofteducation)拷贝 到另一个字符数组中。(知识点:数组复制) [必 做题] • 3、给定一个有9个整数(1,6,2,3,9,4,5,7,8)的数组 ,先排序,然后输出排序后的数组的值。(知识 点:Arrays.sort排序、冒泡排序) [必做题]
JAVA编程基础 —— 数组
3 Sept. 2008 © Neusoft Confidential
本章内容
节 知识点 数组的定义和创建 数组的内存模型 数组的初始化 数组元素的访问 数组的属性 数组的异常 多维数组的创建 多维数组的初始化 多维数组的内存模型 多维数组的遍历 数组的复制和排序 掌握程度 难易程度 掌握 掌握 掌握 掌握 掌握 了解 了解 了解 理解 了解 了解 难
课后作业
• 9、给定一维数组{ -10,2,3,246,-100,0,5}
,计算出数组中的平均值、最大值、最小值。( 知识点:数组遍历、数组元素访问) [选作题]
答案 :A、C、D
一维数组
• 数组的异常
示例 Array_exception2.java
数组越界异常( ArrayIndexOutOfBoundsException )
class Array_exception2 { public static void main(String args[]){ int a[]=new int[3]; a[0]=1; a[1]=2; a[2]=3; a[3]=4; System.out.println(a[3]); } }
一维数组
多维数组 数组的操作
难
一维数组
• 数组的定义和创建
数组可以看成是多个相同类型数据的组合,实现对这些数据的统
一管理
{1,2,3,4,5} {―apple‖,“pear‖,“banana‖,“grape‖}
数组中的每一个数据 — 数组的一个元素(element) 数组中的元素可以是任何数据类型,包括基本数据类型和引用
多维数组
• 多维数组的创建
数组名 = new 数据元素类型[ 行数 ] [ 列数 ] ;
或
数组名 = new 数据元素类型[ 行数 ] [ ] ;
a = new int [3][4] ; a = new int [3][ ] ; a = new int [ ][4] ; //非法
必须声明行的个数
课后作业
• 4、有2个多维数组分别是 2 3 4 和 1 5 2 8
5 9 10 -3 2 7 -5 -18 按照如下方式进行运算。生成一个2行4列的数组 。此数组的第1行1列是2*1+3*5+4*2第1行2列是 2*5+3*9+4*7 第2行1列是4*1+6*5+8*2 依次类推 。(知识点:多维数组定义和创建、数组遍历、 数组元素访问) [选作题]
多维数组
• 多维数组的初始化
•
示例 MulArray.java
int[ ][ ] a = new int[3][ ]; a[0] = new int[2]; a[1] = new int[3]; a[2] = new int[4];
a[0][0] = 1; a[0][1] = 2; …
多维数组
• 多维数组的内存模型
• • •
构造/创建数组使用了关键字new,它是内存分配操作符,所谓创建数 组,就是在内存中给数组分配空间。 初始化数组:使用new创建数组后,所有元素其实已经被初始化,元素 都是默认值,这种初始化就叫做”动态初始化“。 还有一种初始化方式是不使用new,而是在声明数组的同时就完成创建 和初始化工作,这叫做”静态初始化“。 如:int[ ] buf = {10,20,30,66}; myNumbers myNumbers [[ 0 0 ]] = = 5; 5;
多维数组
• 多维数组的创建
Java中没有真正的多维数组,只有数组的数组
锯齿数组
Java中多维数组不一定是规则矩阵形式
多维数组
• 多维数组的创建
数组类型 数组名 [ ] [ ]
或
数组类型[ ] [ ] 数组名
数组类型[ ] 数组名 [ ]
int a[ ] [ ] ; int[ ][ ] b ; int[ ] c[ ] ;
或
数组类型[ ]
数组名
声明后的 内存情况
• 示例
int a[ ] ; int[ ] b ; double d[ ] ; char[ ] ch ; Student stu[ ] ; a
stack
null
heap
– 内存结构参考java虚拟机视频
一维数组
• 数组的定义和创建
数组名 = new 数据元素类型[ 元素个数 ]
int a[ ] = {1,2,3,4,5} ;
或
int a[ ] = new int[]{1,2,3,4,5} ;
一维数组
•
声明数组:和使用变量要先声明一样,先声明数组的类型和名称
int[ int[ ]] myNumbers; myNumbers;
•
构造数组:声明之后,还不知道能存放多少个数据
myNumbers myNumbers = = new new int[20]; int[20];
对数组arr_name中,从下标为fromIndex到toIndex的元素(不包括
toIndex)进行升序排序
•
示例:ArraySort_sample.java
int[ ] point = {1,6,2,3,9,4,5,7,8}; java.util.Arrays.sort( point ); for(int i=0;i<point.length;i++) { System.out.println(point[i]); }
类型 数组中元素的个数,称为数组的长度(length) JAVA语言中声明数组时不能指定其长度 e.g. int a[5]; //非法
一维数组
• 数组的其他基本概念
– 数组的索引 -- index – 数组的类型 -- type – 数组的名称 – name
一维数组
• 数组的定义和创建
数组类型 数组名 [ ]
元素的下标可以是整型常量或整型表达式
数组名[元素下标] = 元素值;
int a[ ] ; a = new int[5] ; a[0] = 1; a[1] = 2; a[2] = 3; a[3] = 4; a[4] = 5;
一维数组
• 数组的属性
– 数组的长度(length)必须>=0; – length为只读。 – 利用length遍历数组
Fra Baidu bibliotek
多维数组
• 多维数组的初始化
数组类型 数组名[ ][ ] = { {元素11,元素12,…} , {元素21,元素22,… } } 或 数组类型 数组名[ ][ ] = new 数据类型[ ][ ] { {元素11,元素12,…} , {元素21,… } }
int a[ ][ ] = { {1,2,3}, {4,5}, {7} } ; int a[ ][ ] = new int[ ][ ]{ {1,2,3}, {4,5}, {7} } ;
数组的操作
• 数组的复制 和排序
System.arraycopy(source,srcPos,dest,destPos,length)
复制source数组中从下标srcPos开始的length个元素到目标数组dest,
并从目标数组的下标为destPos的位置开始储存 source: 源数组 srcPos: 源数组中的起始位置 dest: 目标数组 destPos:目标数组中的起始位置 length: 要复制的数组元素的个数
int[ ] array ; array = new int [4] ;
Value
The heap
0 0
0 1
0 2
0 3
数组对象 Index
一维数组
• 数组的初始化
在创建数组的同时就为数组元素分配空间并赋值
数组类型 数组名[ ] = {元素1,元素2,…} 或
数组类型 数组名[ ] = new 数据类型[ ]{元素1,元素2,…}
A.3
B.4
C.5
D.2
答案 :C
数组的操作
• 多维数组的遍历
利用循环语句 和 数组下标
☻ 练习 Array_traversal.java 循环遍历字符串数组{―red‖,‖orange‖,‖yellow‖,―green‖,―blue‖,‖purple‖}, 并将其打印
class Array_traversal { public static void main(String args[ ]){ String color[ ] = {"red","orange","yellow", "green","blue","purple"}; for(int i=0;i<color.length;i++){ System.out.println(color[i]); } } }
int a[ ][ ] = { {1,2,3}, {4,5}, {7} } ;
stack heap 1
a
0X124
a[0]
a[1] a[2]
2 3 4
a[0] a[1] a[2]
5 7
练习
☻ 练习
int[ ][ ]a = new int[3][4]; for(int i=0;i <a.length;i++){ for(int j=0;j <a[i].length;j++){ a[i][j]=i+j; } }, 则a[2][3] = ____