数组的定义:
数组是
相同数据类型的数据按
顺序组成的一种
引用数据类型。
这里的“相同数据类型”是指数据在内存中的数据类型。基本数据类型元素构成的数组也是引用类型。
为什么要定义数组:
方法不能返回多个值
将欲返回的多个值放在数组中,就可以间接实现返回多个值的效果
数组的声明实例化
通过数组名加数组下标,来使用数组中的数据。下标从 0 开始排序。
声明一维数组:数组元素类型[ ] <数组名>;
声明二维数组:数组元素类型[ ][ ] <数组名>;
声明一维数组:数组元素类型[ ] <数组名>;
声明二维数组:数组元素类型[ ][ ] <数组名>;
声明数组仅仅是给出了数组名字和元素的数据类型,要想真正的使用数组必须为它分配内存空间,即实例化数组。在为数组分配内存空间时必须指明数组的长度。
为数组分配内存空间的语法格式如下:<数组名> = new 数组元素类型[数组元素个数];
当声明并实例化一个数组时,就申请了一段连续的内存单元存储数组中的元素,数组是通过数组下标来完成对数组元素的访问的
当声明并实例化一个数组时,就申请了一段连续的内存单元存储数组中的元素,数组是通过数组下标来完成对数组元素的访问的
实例化数组时,系统会为数组赋默认值,例如float数组中元素的默认值是0.0f。可以在声明数组时赋初始值。
byte[] b1 = new byte[]{2, 4, 6, 8}; 等价于 :byte[] b1 = new byte[4]; b1[0]=2; b1[1]=4; b1[2]=6; b1[3]=8;
byte[] b1 = new byte[]{2, 4, 6, 8}; 等价于 :byte[] b1 = new byte[4]; b1[0]=2; b1[1]=4; b1[2]=6; b1[3]=8;
一旦创建了数组,就不能改变他的大小(尽管可以改变每一个数组元素),如果经常需要在运行过程中扩展数组的大小,就应该使用另一种数据结构——数组列表(array list)。
for-each循环
一种功能很强的循环结构,可以用来一次处理数组中的么一个元素(其他类型的元素集合亦可)而不必为指定下标值担心。
这种增强的 for循环 语句格式为:for(variable:collection)statement 定义一个变量用于暂存集合中的每一个元素 ,并执行相应的语句(也可以是语句块)。collection这一集合表达式必须是一个数组或者是一个实现了Iterable接口的类对象(例如:ArrayList)。
<代码>
一维数组
public class Array1{ public static void main(String[] args) { //double scoreArray []; //double [] scoreArray; //数组声明的两种形式 这条语句只声明了变量,并没有将他初始化为一个真正的数组。 //scoreArray =new double[3]; //实例化 double[] scoreArray = new double[3]; //数组声明并实例化 scoreArray[0]=0; scoreArray[1]=1; scoreArray[2]=2; for(int i = 0;i<3;i++){ System.out.print(scoreArray[i]+","); } System.out.print("\n"); //用“ ”或者‘ ’都可以 System.out.println(scoreArray[2]); /* * 加强for循环-for each 循环 * 循环scoreArray中的每一个元素。每循环一遍,将所循环的元素赋值给前面声明的score变量 */ for(double score : scoreArray){ System.out.println(score); } } }
数组的初始化以及匿名数组
错误程序:
public static void main(String[ ] args){ int[ ] scoreArray = new int[5]; scoreArray = {60, 80, 90, 70, 85}; int[ ] ageArray; ageArray = {21, 16, 28};
java中提供了一种创建数组对象并同时赋予初始值的简化书写形式。注意:在使用这种语句的时候,不需要调用new
改正:
int [] scoreArray = {60,80,90,70,85}; int [] ageArray = {21,16,28};上面这种穷举法只能用于初始化数组,即必须和声明数组代码放在一条语句中完成
甚至还可以初始化一个匿名的数组: new int [] {17,19,23,20}
这种表示法将创建jinxingchushijinxingchush一个新数组并利用括号中提供的值进行初始化。数组的大小就是初始值的个数。使用这种语法形式可以在不创建新变量的情况下重新初始化一个数组。
<代码>
二维数组
public class stuArray { public static void main(String[] args) { // TODO Auto-generated method stub int [][] stuArray = {{1,2,3},{1,2,3},{1,2,3},{1,2,3}}; //枚举 for (int i=0;i<4;i++){ for(int j=0;j<3;j++){ System.out.print(stuArray[i][j]+","); } System.out.println(); } } }
public class stuArray1 { public static void main(String[] args) { int [][]stuArray; //声明 stuArray = new int[4][3]; //实例化 stuArray[0][0]=1; stuArray[0][1]=2; stuArray[0][2]=3; stuArray[1][0]=4; stuArray[1][1]=5; stuArray[1][2]=6; stuArray[2][0]=7; stuArray[2][1]=8; stuArray[2][2]=9; stuArray[3][0]=10; stuArray[3][1]=11; stuArray[3][2]=12; int i=0; int j=0; //求每名同学的平均成绩 for( i=0;i<4;i++){ int stu=0; int length=0; for( j=0;j<3;j++){ System.out.print(stuArray[i][j]+","); stu=stu+stuArray[i][j]; length ++; } System.out.println(stu/length);//m每名同学的平均成绩 System.out.println(); } //求每个学科 的 考试成绩 for(j=0;j<3;j++){ int obj=0; int leng=0; for(i=0;i<4;i++){ obj=obj+stuArray[i][j]; leng++; } System.out.println(obj/leng); //每门学科的平均成绩 } } }
public class stuArray2 { //保存一个班同学(2个人的)成绩(语文数学英语) public static void main(String[] args) { // TODO Auto-generated method stub int [][]scoreArray= new int [2][3]; int[] xiaowang={66,77,88}; int[] xiaoli = {77,88,66}; scoreArray[0]=xiaowang; scoreArray[1]=xiaoli; scoreArray[0][0]=66; scoreArray[0][1]=77; scoreArray[0][2]=88; scoreArray[1][0]=77; scoreArray[1][1]=88; scoreArray[1][2]=66; for(int []score:scoreArray){ //每循环一次获取某个人的成绩 for(int stu:score){ //每循环一次输出某个人的某一科成绩 System.out.print(stu); } System.out.println(); } } }
更简单的方法打印数组中的所有值::利用Arrays类的toString方法。
调用Arrays.toString(a);返回一个包含数组元素的字符串,这些元素被放置在括号里,并用逗号分隔。