第九章
数组
学习目标,
?如何描述一个数组
?使用数组存储 基本值 和 对象引用
?一维数组和二维数组
思考,为什么需要使用数组?
? 示例,创建从 1-10号同学的编号
问题,创建同一个类型的多个变量
缺点,
? 难于管理
? 方法笨拙
? 重复工作
? 每个变量需要唯一标识符
解决方案,数组
? 根据需要可以存储许多值在一个数组中。
? 数组可以是基本数据类型或引用类型。
char[ ] status; //char array
int[ ] numbers; //int array
String[ ] names; //String array
Shirt[ ] shirts; //Shirt array
? 数组的每个部分称为一个元素。
numbers[6]; // 第 7个元素
numbers[10]; // 第 11个元素
数组和 main方法
? 在命令行中,main方法中使用参数数组
public static void main( String args[])
args[0]
args[1]
……
args[10]
数组
创建基本类型数组
? 基本数据类型数组或引用类型数组都是 对象
? 三个步骤,
1、声明
2、实例化
3、初始化
1、声明基本数据类型数组
int num[ ];
double total[ ];
char status[ ];
int[ ] num;
double[ ] total;
char[ ] status;
注,数组大小声明后不能再被改变 。
2、实例化基本数据类型数组
声明和实例化基本数据类型数组
int[ ] x=new int[100];
double[ ] total=new double[1000];
char[ ] status=new char[20];
3、初始化基本数据类型数组
数组的初始化方式有两种,
?一种方式 是在声明和实例子化数组之后给数组的每个元素赋初值 。
一次初始化一个元素 。
例如,
int[ ] x=new int[100];
x[0]=1;
x[1]=2;
x[2]=3;
x[3]=4;
x[4]=5;
…
x[99]=99;
?另一种方式 是在声明数组的同时进行初始化 。
例如,int[ ] a={1,2,3,4,5};
上述语句声明并创建了数组 a,并且为数组每个元素赋值即初始化,
使 a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=5。
由上可见, 数组初始化可由花括号, {}”括起的一串由逗号分隔的
表达式组成, 逗号 (, ) 分隔数组元素中的值 。
在语句中 不必明确指明数组的长度, 因为它已经体现在所给出
的数据元素个数之中了, 系统会自动根据所给的元素个数为数组分
配一定的内存空间 。 如上例中数组 a的长度自动设置为 5。
注:, {}”里的每一个数组元素的数据类型必须是相同的 。
int[ ] a={1,2,3,4,5}; //正确
int[ ] a;
a={1,2,3,4,5}; //错误
创建引用类型数组
? 三个步骤,
1、声明
2、实例化
3、初始化
1、声明引用类型数组
String names[ ];
Shirt shirts[ ];
String [ ] names;
Shirt [ ] shirts;
2、实例化引用类型数组
names=new String[7];
shirts=new Shirt[5];
或
String[ ] names=new String[7];
Shirt[ ] shirts=new Shirt[5];
3、初始化引用类型数组
方式一,
Shirt[0]= new Shirt() ;
Shirt[1]= new Shirt(“Nike”,” L”) ;
Shirt[2]= new Shirt(“Adidas”,” XL”) ;
Shirt[] shirts={new Shirt(),
new Shirt(“Nike”,” L”),
new Shirt(“Adidas”,” XL”) };
方式二,
访问数组内的变量
? 数组中的每个元素都可以通过一个表示该元素 在数
组中位置的索引 来访问。
? 注:数组中第 1个元素索引为 0,依次类推
? 示例,
status[0]=?3?;
names[1]=“Wang Jian”;
ages[1]=19;
price[2]=29.99F;
int i=ages[1]; //将数组元素赋给另一个变量
?int list[ ]=new int[3]; 它有 3个元素,分别为,list[0],
list[1]和 list[2] 。 ( 注意:不存在 list[3])
数组在内存中的存储方式
? 所有数组都是 对象
? 定义数组就是声明 引用变量
基本数据类型数组在内存中的存储方式
引用类型数组在内存中的存储方式
数组边界
? 数组是一种对象,对象有自己的状态
? 所以数组也有它自己的长度,数组的长度也叫 数组边界
month[12]数组的边界是从 month[0]—— month[11]
? 数组中元素的数目作为数组对象的一部分存储
? 试图访问实际不存在的数组元素将引起错误
确定数组的长度
? 可以在运行时使用 length成员变量 来确定数组的长度
float[ ] salesAmounts=new float[10];
? 遍历整个数组
float[ ] salesAmounts=new float[10];
for (int i=0;i <salesAmounts.length;i++)
{
循环体;
}
查看结果,Arrays.java
使用循环设置数组的值
查看结果,CreatStreets.java
思考,
1、查找一个数组中特定的某个数值
2、实现对一组数进行排序,从小到大的显示。
二维数组
? 二维数组的创建过程和使用方法与一维数组相同。
?二维数组声明的格式为,
类型 [ ] [ ] 数组名 ;
例如,int [ ][ ] intArray;
?与一维数组一样,需要用 new关键字来创建数组。
? 示例,
int [ ] [ ] repSales=new int[5][12];
二维数组
? 数组也可以用“数组的数组”方式来产生二维数组 。
例如,
int [ ][ ] number=new int[3][3];
number[0][0]=1;
number[0][1]=2;
number[0][2]=3;
number[1][0]=4;
number[1][1]=5;
number[1][2]=6;
number[2][0]=7;
number[2][1]=8;
number[2][2]=9;
? 若要简化上面的设置,可用一组嵌套式大括号来完成 。
Int[ ][ ] number={{1,2,3},{4,5,6},{7,8,9}};
注意,
在使用运算符 new来分配内存时,对于多维数组至少要
给出最高维的大小。
例如:如果在程序中出现
int a2[ ][ ] = new int[ ][ ];
编译器将出现错误,
例:遍历二维数组 fiveYears的两个维(一个维 12表示 12个月,
一个维 5表示 5年)的值
数组
学习目标,
?如何描述一个数组
?使用数组存储 基本值 和 对象引用
?一维数组和二维数组
思考,为什么需要使用数组?
? 示例,创建从 1-10号同学的编号
问题,创建同一个类型的多个变量
缺点,
? 难于管理
? 方法笨拙
? 重复工作
? 每个变量需要唯一标识符
解决方案,数组
? 根据需要可以存储许多值在一个数组中。
? 数组可以是基本数据类型或引用类型。
char[ ] status; //char array
int[ ] numbers; //int array
String[ ] names; //String array
Shirt[ ] shirts; //Shirt array
? 数组的每个部分称为一个元素。
numbers[6]; // 第 7个元素
numbers[10]; // 第 11个元素
数组和 main方法
? 在命令行中,main方法中使用参数数组
public static void main( String args[])
args[0]
args[1]
……
args[10]
数组
创建基本类型数组
? 基本数据类型数组或引用类型数组都是 对象
? 三个步骤,
1、声明
2、实例化
3、初始化
1、声明基本数据类型数组
int num[ ];
double total[ ];
char status[ ];
int[ ] num;
double[ ] total;
char[ ] status;
注,数组大小声明后不能再被改变 。
2、实例化基本数据类型数组
声明和实例化基本数据类型数组
int[ ] x=new int[100];
double[ ] total=new double[1000];
char[ ] status=new char[20];
3、初始化基本数据类型数组
数组的初始化方式有两种,
?一种方式 是在声明和实例子化数组之后给数组的每个元素赋初值 。
一次初始化一个元素 。
例如,
int[ ] x=new int[100];
x[0]=1;
x[1]=2;
x[2]=3;
x[3]=4;
x[4]=5;
…
x[99]=99;
?另一种方式 是在声明数组的同时进行初始化 。
例如,int[ ] a={1,2,3,4,5};
上述语句声明并创建了数组 a,并且为数组每个元素赋值即初始化,
使 a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=5。
由上可见, 数组初始化可由花括号, {}”括起的一串由逗号分隔的
表达式组成, 逗号 (, ) 分隔数组元素中的值 。
在语句中 不必明确指明数组的长度, 因为它已经体现在所给出
的数据元素个数之中了, 系统会自动根据所给的元素个数为数组分
配一定的内存空间 。 如上例中数组 a的长度自动设置为 5。
注:, {}”里的每一个数组元素的数据类型必须是相同的 。
int[ ] a={1,2,3,4,5}; //正确
int[ ] a;
a={1,2,3,4,5}; //错误
创建引用类型数组
? 三个步骤,
1、声明
2、实例化
3、初始化
1、声明引用类型数组
String names[ ];
Shirt shirts[ ];
String [ ] names;
Shirt [ ] shirts;
2、实例化引用类型数组
names=new String[7];
shirts=new Shirt[5];
或
String[ ] names=new String[7];
Shirt[ ] shirts=new Shirt[5];
3、初始化引用类型数组
方式一,
Shirt[0]= new Shirt() ;
Shirt[1]= new Shirt(“Nike”,” L”) ;
Shirt[2]= new Shirt(“Adidas”,” XL”) ;
Shirt[] shirts={new Shirt(),
new Shirt(“Nike”,” L”),
new Shirt(“Adidas”,” XL”) };
方式二,
访问数组内的变量
? 数组中的每个元素都可以通过一个表示该元素 在数
组中位置的索引 来访问。
? 注:数组中第 1个元素索引为 0,依次类推
? 示例,
status[0]=?3?;
names[1]=“Wang Jian”;
ages[1]=19;
price[2]=29.99F;
int i=ages[1]; //将数组元素赋给另一个变量
?int list[ ]=new int[3]; 它有 3个元素,分别为,list[0],
list[1]和 list[2] 。 ( 注意:不存在 list[3])
数组在内存中的存储方式
? 所有数组都是 对象
? 定义数组就是声明 引用变量
基本数据类型数组在内存中的存储方式
引用类型数组在内存中的存储方式
数组边界
? 数组是一种对象,对象有自己的状态
? 所以数组也有它自己的长度,数组的长度也叫 数组边界
month[12]数组的边界是从 month[0]—— month[11]
? 数组中元素的数目作为数组对象的一部分存储
? 试图访问实际不存在的数组元素将引起错误
确定数组的长度
? 可以在运行时使用 length成员变量 来确定数组的长度
float[ ] salesAmounts=new float[10];
? 遍历整个数组
float[ ] salesAmounts=new float[10];
for (int i=0;i <salesAmounts.length;i++)
{
循环体;
}
查看结果,Arrays.java
使用循环设置数组的值
查看结果,CreatStreets.java
思考,
1、查找一个数组中特定的某个数值
2、实现对一组数进行排序,从小到大的显示。
二维数组
? 二维数组的创建过程和使用方法与一维数组相同。
?二维数组声明的格式为,
类型 [ ] [ ] 数组名 ;
例如,int [ ][ ] intArray;
?与一维数组一样,需要用 new关键字来创建数组。
? 示例,
int [ ] [ ] repSales=new int[5][12];
二维数组
? 数组也可以用“数组的数组”方式来产生二维数组 。
例如,
int [ ][ ] number=new int[3][3];
number[0][0]=1;
number[0][1]=2;
number[0][2]=3;
number[1][0]=4;
number[1][1]=5;
number[1][2]=6;
number[2][0]=7;
number[2][1]=8;
number[2][2]=9;
? 若要简化上面的设置,可用一组嵌套式大括号来完成 。
Int[ ][ ] number={{1,2,3},{4,5,6},{7,8,9}};
注意,
在使用运算符 new来分配内存时,对于多维数组至少要
给出最高维的大小。
例如:如果在程序中出现
int a2[ ][ ] = new int[ ][ ];
编译器将出现错误,
例:遍历二维数组 fiveYears的两个维(一个维 12表示 12个月,
一个维 5表示 5年)的值